Systems and methods for emulation of user input during a play of a legacy game

ABSTRACT

A method for emulation of user input during a play of a legacy game is described. The method includes receiving a user input from the updated hand-held controller and parsing the user input to identify an updated input device of the updated hand-held controller. The method further includes determining, based on the identity of the updated input device, an identity of a legacy input device of a legacy hand-held controller. The method includes determining whether one or more blocks of code for servicing a functionality of the legacy input device of the legacy hand-held controller are cached, and accessing one or more instructions of a legacy game code of the legacy game upon determining that the one or more blocks of code are not cached. The method includes compiling the one or more blocks of code from the one or more instructions of the legacy game code.

FIELD

The present disclosure relates to systems and methods for emulation of user input during a play of a legacy game.

BACKGROUND

As electronic gaming and networking technologies have become more advanced, the complexity of games has increased accordingly. As a result, there may be more complex storylines, game play objectives, missions and tasks, capabilities associated with game play avatars, and scoring. Scoring may occur and be weighted in various ways and likewise be determined in various categories or on an individual or team basis.

The significance of the aforementioned problems only increases as the complexity of electronic games increases. As such, some players may wish to play older games, which are less complicated.

It is in this context that embodiments of the invention arise.

SUMMARY

Embodiments of the present disclosure provide systems and methods for emulation of user input during a play of a legacy game.

In one embodiment, a method for facilitating a play of a legacy game is described. The method includes receiving a user input during the play of the legacy game, determining whether one or more blocks of code for servicing the user input are cached, and accessing one or more instructions of a legacy game code upon determining that the one or more blocks of code are not cached. The method further includes compiling the one or more blocks of code from the one or more instructions of the legacy game code, caching the one or more blocks of code, and executing the one or more blocks of code to display a virtual environment.

In an embodiment, a computing device for facilitating a play of a legacy game is described. The computing device includes a processor configured to receive a user input during the play of the legacy game. The computing device further includes a cache coupled to the processor and a memory device coupled to the processor. The processor determines whether one or more blocks of code for servicing the user input are stored in the cache. The processor accesses, from the memory device, one or more instructions of a legacy game code upon determining that the one or more blocks of code are not stored in the cache. Also, the processor compiles the one or more blocks of code from the one or more instructions of the legacy game code. The processor stores the one or more blocks of code in the cache and executes the one or more blocks of code to display a virtual environment.

In one embodiment, a method is described. The method includes generating a first validation result from one or more instructions of a legacy game code. The one or more instructions of the legacy game code are associated with one or more blocks of code. The method further includes examining one or more memory addresses associated with the one or more instructions to determine whether the one or more blocks of code are to be marked as invalid. The method includes determining whether the one or more blocks of code are to be executed, and determining whether the one or more blocks of code are marked as invalid upon determining that the one or more blocks of code are to be executed. The method includes examining the one or more memory addresses to generate a second validation result from the one or more instructions, comparing the first validation result with the second validation result to determine whether the one or more blocks of code are invalid, and recompiling one or more additional blocks of code associated with the one or more instructions upon determining that the one or more blocks of code are invalid. The method includes executing the one or more additional blocks of code to display a virtual environment.

In an embodiment, a method for emulation of user input during a play of a legacy game is described. The method includes receiving a user input from the updated hand-held controller during a play of the legacy game, parsing the user input to identify an updated input device of the updated hand-held controller, and determining a functionality of the updated input device. The method further includes determining, based on the identity of the updated input device, an identity of a legacy input device of a legacy hand-held controller. The method includes identifying a functionality of the legacy input device corresponding to the functionality of the updated input device, determining whether one or more blocks of code for servicing the functionality of the legacy input device of the legacy hand-held controller are cached, and accessing one or more instructions of a legacy game code of the legacy game upon determining that the one or more blocks of code are not cached. The method includes compiling the one or more blocks of code from the one or more instructions of the legacy game code.

In one embodiment, a system for using an updated hand-held controller to play a legacy game is described. The system includes one or more processors, which are configured to receive a user input from the updated hand-held controller during a play of the legacy game. The one or more processors are further configured to parse the user input to identify an updated input device of the updated hand-held controller and determine a functionality of the updated input device. The one or more processors are configured to determine, based on the identity of the updated input device, an identity of a legacy input device of a legacy hand-held controller. The one or more processors are configured to identify a functionality of the legacy input device corresponding to the functionality of the updated input device and determine whether one or more blocks of code for servicing the functionality of the legacy input device of the legacy hand-held controller are cached. The one or more processors are configured to access one or more instructions of a legacy game code of the legacy game in response to the determination that the one or more blocks of code are not cached. The one or more processors are configured to compile the one or more blocks of code from the one or more instructions of the legacy game code. A memory device is coupled to the one or more processors.

In an embodiment, a system for using an updated hand-held controller to play a legacy game is described. The updated hand-held controller has an updated input device. The updated hand-held controller is configured generate a user input during a play of the legacy game. A computing device is coupled to the updated hand-held controller. The computing device is configured to receive the user input from the updated hand-held controller, parse the user input to identify the updated input device of the updated hand-held controller, and determine a functionality of the updated input device. The computing device is configured to determine, based on the identity of the updated input device, an identity of a legacy input device of a legacy hand-held controller. The computing device is further configured to identify a functionality of the legacy input device corresponding to the functionality of the updated input device, determine whether one or more blocks of code for servicing the functionality of the legacy input device of the legacy hand-held controller are cached, and access one or more instructions of a legacy game code of the legacy game in response to the determination that the one or more blocks of code are not cached. The computing device is configured to compile the one or more blocks of code from the one or more instructions of the legacy game code.

Some advantages of the herein described systems and methods for converting the legacy code into an updated code include allowing functionality of the legacy code to be executed by an updated machine. Without the conversion, due to security issues, the functionality of the legacy code cannot be executed by the updated machine. For example, there is no permission to execute the legacy code from the updated machine and write data generated upon execution of the legacy code to registers in the updated machine. As such, by providing the conversion, the execution of the functionality of the legacy code by the updated machine is facilitated.

Further advantages of the herein described systems and methods include saving time of execution. As an example, two or more instructions, such as a routine and a subroutine or two similar instructions, of the legacy code are combined into one basic block of the updated code. As such, execution of the updated code is faster compared to execution of the legacy code.

Additional advantages of the herein described systems and methods for converting the legacy code into the updated code include recompiling one or more additional basic blocks of the updated code upon determining that one or more basic blocks of the updated code are invalid. For example, when the one or more basic blocks are marked as invalid, it is determined whether the one or more basic blocks are actually invalid. Upon determining so, instead of executing the one or more basic blocks, the one or more additional basic blocks are compiled and executed. The one or more additional basic blocks correspond to the same game to which the one or more basic blocks correspond.

Yet further advantages of the herein described systems and methods for converting the legacy code into the updated code include that all of the basic blocks do not need to be checked for invalidity. For example, only those basic blocks that are marked as invalid after compiling the basic blocks are checked for validity. This reduces latency in displaying a virtual environment from the one or more basic blocks. Also, processing power used for checking all of the basic blocks for invalidity is not needed.

Also, advantages of the herein described systems and methods for converting the legacy code into the updated code include saving processing time and processing power when the updated code for a game is already compiled. Once the updated code is generated at a server or at a game console, the updated code need not be recompiled. Rather, the updated code can be transferred from the server or the game console to another game console. As such, processing time and processing power in regenerating the updated code at the other game console is saved.

Additional advantages of the herein described systems and methods for emulation of user input during a play of a legacy game include using an updated hand-held controller to play the legacy game. An input emulator is used to convert a user input received from the updated hand-held controller into a user input for a legacy hand-held controller. The conversion of the user input received from the updated hand-held controller facilitates a play of the legacy game by using the updated hand-held controller.

Other aspects of the present disclosure will become apparent from the following detailed description, taken in conjunction with the accompanying drawings, illustrating by way of example the principles of embodiments described in the present disclosure.

BRIEF DESCRIPTION OF THE DRAWINGS

Various embodiments of the present disclosure are best understood by reference to the following description taken in conjunction with the accompanying drawings in which:

FIG. 1 is a block diagram to illustrate an embodiment of a system for generation of basic blocks of an updated code.

FIG. 2 is a flowchart to illustrate an embodiment of a method for compiling and executing a basic block of a game code.

FIG. 3 is a block diagram to illustrate an embodiment of a system for compiling and executing the basic blocks.

FIG. 4A is a diagram of an embodiment of a system to illustrate compiling of the basic blocks within a game console.

FIG. 4B is a diagram of an embodiment of a system to illustrate compiling of the basic blocks within a server system.

FIG. 5A is a diagram to illustrate an embodiment of a basic block.

FIG. 5B is a diagram to illustrate an embodiment of a compile operation performed by a basic block compiler.

FIG. 6A is a diagram of an embodiment of a system to illustrate components of the emulation processor system.

FIG. 6B is a flowchart to illustrate an embodiment of a method for compiling and executing the basic blocks.

FIG. 6C is a diagram of an embodiment of a system to illustrate that for different user inputs, different basic blocks are compiled dynamically.

FIG. 7A is a diagram of an embodiment of a system to illustrate deletion of an emulated processing unit (PU) code from a memory device.

FIG. 7B is a flowchart to illustrate an embodiment of a method for deleting the emulated PU code from the memory device.

FIG. 8A is a diagram of an embodiment of an emulation processor system to illustrate validation of basic blocks.

FIG. 8B is a flowchart of an embodiment of a method to illustrate a validation operation performed by the emulation processor system of FIG. 8A.

FIG. 8C is a continuation of the flowchart of the method of FIG. 8B.

FIG. 9A is a diagram to illustrate an embodiment of a legacy machine.

FIG. 9B is a diagram to illustrate an embodiment of an updated machine.

FIG. 10A is a diagram of an embodiment of a system to illustrate combining of multiple basic blocks into one basic block by a basic block compiler.

FIG. 10B is a diagram of an embodiment of a system to illustrate modification of one or more of the basic blocks.

FIG. 10C is a diagram of an embodiment of the system to illustrate combining of a basic block created based on a subroutine with a basic block generated based on an emulated PU code instruction, which calls the subroutine.

FIG. 10D is a Diagram of an Embodiment of a System to Illustrate an insertion of a basic block between two basic blocks.

FIG. 10E is a diagram of an embodiment of a system to illustrate a switch in an order of execution of basic blocks.

FIG. 11A is a flowchart of an embodiment of a method to illustrate use of a count of a number of cycles stored in the basic block n.

FIG. 11B is a continuation of the flowchart of the method of FIG. 11A.

FIG. 12 is a diagram of an embodiment of a system to illustrate a transfer of the basic blocks from a first client device to a second client device.

FIG. 13 is a diagram of an embodiment of a system to illustrate emulation of a user input received from an updated hand-held controller during a play of a legacy game.

FIG. 14A-1 is a diagram of an embodiment of a system to illustrate a change from a default mapping to a current mapping.

FIG. 14A-2 is a diagram of an embodiment of a memory device to illustrate the default mapping and a current mapping.

FIG. 14B is a diagram of an embodiment of a system to illustrate use of the current mapping instead of the default mapping during a play of the legacy game.

FIG. 15 is a diagram of an embodiment of a system to illustrate an identification of a move right button of a legacy hand-held controller based on movement of a right thumb stick of the updated hand-held controller.

FIG. 16A is a diagram of an embodiment of a system to illustrate generation of a virtual image of a cross-hair when a touchpad is selected by a user.

FIG. 16B is a diagram of an embodiment of a system to illustrate a correspondence between a location of selection on the touchpad by the user and a location of a cross-hair on an image frame.

FIG. 17 is a diagram of an embodiment of a system to illustrate the use of different mappings with use of different types of hand-held controllers.

FIG. 18 is a diagram of an embodiment of a system to illustrate a communication of a current mapping from a game console to another game console.

FIG. 19A is a screen shot of an image to illustrate reception of a type and a sub-type of an updated hand-held controller.

FIG. 19B is a screen shot of an image to illustrate a menu for receiving a type of an updated hand-held controller.

FIG. 20 is an embodiment of a screen shot of an image to illustrate a mapping between input devices of a legacy hand-held controller and an updated hand-held controller.

FIG. 21 is a flow diagram conceptually illustrating various operations, which are performed for streaming a cloud video game to a client device, in accordance with implementations of the present disclosure.

FIG. 22 is a block diagram of an embodiment of a game console that is compatible for interfacing with a display device of a client device and is capable of communicating via a computer network with a game hosting system.

FIG. 23 is a diagram illustrating components of a head-mounted display (HMD).

FIG. 24 illustrates an embodiment of an Information Service Provider (INSP) architecture.

DETAILED DESCRIPTION

Systems and methods for emulation of user input during a play of a legacy game are described. It should be noted that various embodiments of the present disclosure are practiced without some or all of these specific details. In other instances, well known process operations have not been described in detail in order not to unnecessarily obscure various embodiments of the present disclosure.

FIG. 1 is a block diagram to illustrate an embodiment of a system 100 for generation of basic blocks 1 through n of the updated code, where n is a positive integer. The system 100 includes a cache 102, a basic block compiler 104, and an emulated processing unit (PU) code 106 of a legacy game N having a game title GN, where N is a positive integer. As an example, a cache, as used herein, is a hardware or software component that stores data so that future requests for the data can be served faster. A cache hit occurs when requested data can be found in the cache, while a cache miss occurs when it cannot. The cache hits are served by reading data from the cache, which is faster than re-computing a result or reading from a slower data store, such as a memory device, thus, the more requests that can be served from the cache, the faster a system performs. To illustrate, a cache is a group of registers, which can be accessed faster, such as by 10 to 100 times, compared to a main memory device.

As an example, a cache has a lower number of memory addresses than the main memory device. In the example, a processor first determines whether data used in an operation is stored at a memory address in the cache and if not the processor accesses memory addresses in the main memory device to look for the data.

As an example, a basic block compiler, as used herein, is a computer program that converts the emulated PU code 106 code into a game code GCN, which is an example of the updated code. The game code GCN represents functionality of the legacy game N. The computer program is executed by one or more processors of an emulation processor system. The game code GCN is sometimes referred to herein as an intermediate code. As an example, the intermediate code is neither a source code nor a machine code. To illustrate, the intermediate code includes basic blocks that are not specific to an architecture of a central processing unit (CPU) or an architecture of a graphical processing unit (GPU) of an updated machine, examples of which are provide below. In the illustration, the intermediate code includes basic blocks that can be executed by a CPU or a GPU of the updated machine, examples of which include a game console, a desktop computer, a laptop computer, a tablet, a smartphone, and a smart television. As an example, the source code is written using a human readable programming language, which can be plain text. As an example, a basic block compiler, as used herein, is implemented using hardware or software or a combination thereof. To illustrate, functionality of the basic block compiler is implemented using a controller or a programmable logic device (PLD) or an application specific integrated circuit (ASIC).

Examples of a controller, as used herein, include a processor and a memory device. The processor is coupled to the memory device. As used herein, as an example, a processor is a microprocessor, or a CPU, or a GPU, or a microcontroller, or an ASIC, or a PLD. Examples of a memory device, as used herein, include a random access memory (RAM) and a read-only memory (ROM). To illustrate, the memory device is a flash memory device, or a hard disk, or a solid-state storage device, or a redundant array of independent disks (RAID), or a combination thereof.

An example of the emulated PU code 106 is a machine code that directs a processor, such as a CPU or a GPU, of a legacy machine to perform an operation. For example, the emulated PU code 106 includes a sequence of instructions that instruct the CPU of the legacy machine to perform a specific operation, such as load, store, jump, or an arithmetic logic unit (ALU) operation on data stored within the CPU's registers. As another example, the emulated PU code 106 is a binary code that includes a series of ones and zeros. As another example, the emulated PU code 106 includes a sequence of instructions that instruct the GPU of the legacy machine to perform a specific operation, such as load, store, jump, or an ALU operation on data stored within the GPU's registers. The GPU of the legacy machine performs an operation on a virtual object to assign a graphical parameter, such as color, or intensity, or shade, or texture, or a combination thereof, to the virtual object. Examples of the virtual object include a virtual vehicle, a virtual animal, a virtual game character, a virtual stationary object, a virtual building, etc.

The emulated PU code 106 is specific or unique to an architecture of the CPU or the GPU of the legacy machine. For example, the emulated PU code 106 cannot be executed by a CPU or a GPU of the updated machine. As another example, the emulated PU code 106 is executable on the legacy machine but cannot be executed on the updated machine.

As an example, the emulated PU code 106 is executed by the processor of the legacy machine to perform operations in the legacy game N. To illustrate, the emulated PU code 106 is executed to play legacy games on the legacy machine. Examples of the legacy games include video games, such as, a fighter jet game, a dance lesson game, an adventure game, and an action game. To illustrate, the legacy games are not being updated by a game developer. To further illustrate, there are no current versions of the legacy games. As another further illustration, the legacy games are created years before the creation of a current game.

The basic block compiler 104 accesses the emulated PU code 106 for the legacy game N and converts the emulated PU code 106 into one or more basic blocks, such as the basic blocks 1 through n. As an example, each basic block 1 through n has a start identifier and an end identifier to distinguish one basic block from another. The basic block compiler 104 stores the basic blocks 1 through n in the cache 102. When the basic blocks 1 through n are executed, the legacy game N is emulated.

FIG. 2 is a flowchart to illustrate an embodiment of a method 200 for compiling and dispatching a basic block of the game code GCN. The method 200 is executed by one or more processors of the updated machine. The method 200 includes an operation 202 of determining whether there is a cache hit, e.g., whether a basic block is stored in the cache 102. For example, the operation 202 is performed or triggered when a user input during a play of a legacy game is received. To illustrate, the user input is received to change a position or an orientation or a combination thereof of a virtual object of the legacy game N. In the illustration, upon determining that the user input is received, it is determined whether a basic block, such as one of the basic blocks 1 through n, is stored in the cache 102 (FIG. 1 ). In the illustration, the basic block is to be executed to change the position or the orientation or the combination thereof of the virtual object.

As another illustration, the operation 202 is performed when a user input to change the parameter, such as a look and feel, of a virtual object of a legacy game is received. In the illustration, upon determining that the user input is received, it is determined whether a basic block, such as one of the basic blocks 1 through n, is stored in the cache 102. In the illustration, the basic block is to be executed to change the parameter of the virtual object.

In response to determining that the basic block is cached, in an operation 204 of the method 200, the basic block is dispatched. For example, the basic block is executed or run in the operation 204. To illustrate, the basic block is run by the CPU of the updated machine to move a virtual object from one position to another or from one orientation to another or a combination thereof. As another illustration, the basic block is executed by the GPU of the updated machine to assign the parameter to a portion of the virtual object. An example of a portion of a virtual object includes a pixel of virtual object or a triangular portion of the virtual object or a portion of a pre-defined shape of the virtual object. To illustrate, the virtual object is divided into a pre-determined number of pixels, and each pixel is assigned a value of the parameter.

In response to determining that the basic block is not cached, an operation 206 of compiling the basic block is performed in the method 200. The operation 206 is performed by the basic block compiler 104 (FIG. 1 ). For example, the basic block compiler 104 parses the emulated PU code 106 (FIG. 1 ) for the legacy game N to identify an emulated PU code instruction that includes a function for servicing the user input received, before the operation 202, during the play of the legacy game. The user input received, before the operation 202, triggers the operation 202. To illustrate, the basic block compiler 104 traverses through each emulated code PU instruction of the emulated PU code 106 to determine whether the emulated code PU code instruction includes an operation, such as a function, to satisfy, such as generate a response to, the user input received during the play of the legacy game. In the illustration, once the function is identified, the basic block compiler 104 converts the emulated code PU code instruction to generate the basic block. In the illustration, in response to the user input received, before the operation 202, other emulated code PU code instructions, of the legacy game, that are no needed to service the user input are not compiled into basic blocks by the basic block compiler 104.

In an operation 208 of the method 200, the basic block generated in the operation 206 is stored in the cache 102 by the basic block compiler 104. The cached basic block is then executed in the operation 204 to service the user input received before the operation 202.

In one embodiment, the method 200 is executed by one or more processors of a server system. As an example, the server system includes updated machines as servers. To illustrate, each server blade is an updated machine, such as a game console.

In an embodiment, the method 200 is not executed until a user input is received. For example, there is no determination whether a basic block, such as one of the basic blocks 1 through n, is stored in the cache 102, no compiling of the basic blocks, and no execution of the basic blocks until the user input is received.

In one embodiment, the basic block compiler 104 compiles one or more of the basic blocks 1 through n in response to a first user input during a play of the legacy game N and compiles one or more of remaining of the basic blocks 1 through n in response to a second user input during a play of the legacy game N. To illustrate, the basic block compiler 104 generates the basic blocks 1 and 2 to service the first user input and generates the basic blocks 3 through 7 to service the second user input. The second user input is received after the first user input.

FIG. 3 is a block diagram to illustrate an embodiment of a system 304 for compiling and dispatching basic blocks, such as the basic blocks 1 through n. The system 300 includes the basic block compiler 104, the cache 102, and a block dispatcher 302. As an example, the block dispatcher 302 is hardware or software, or a combination thereof, that carries out operations of one or more of the basic blocks 1 through n to service a user input. To illustrate, the block dispatcher 302 is a PLD or an ASIC or a controller. As another illustration, the block dispatcher 302 is a computer software. As an example, the block dispatcher 302 is the GPU or the CPU of the updated machine.

The basic block compiler 104 decodes a portion of the emulated PU code 106 (FIG. 1 ), such as an operational code (opcode), and translates the portion into an intermediate representation for a processing unit of the updated machine. For example, the basic block compiler 104 parses a portion, such as one or more instructions, of a CPU code of the emulated PU code 106 to determine whether the portion of the CPU code includes functionality to service a user input. Upon determining so, the basic block compiler 104 translates the portion of the CPU code into one or more basic blocks, such as the basic blocks 1 through n. As another example, the basic block compiler 104 parses a portion, such as one or more instructions, of a GPU code of the emulated PU code 106 to determine whether the portion of the GPU code includes functionality to service a user input. Upon determining so, the basic block compiler 104 translates the portion of the GPU code into one or more basic blocks, such as the basic blocks 1 through n.

Also, the basic block compiler 104 estimates a number of cycles for execution of each basic block generated from the portion of the emulated PU code 106 to generate an estimated count. For example, the basic block compiler 104 determines that the basic block 1 includes a jump operation and a jump operation takes a pre-determined amount of time. The basic block compiler 104 estimates that the jump operation of the basic block 1 takes the pre-determined amount of time. The block compiler 104 stores the estimated count in the cache 102. For example, the block compiler 104 stores the estimated count in the basic block n for which the number of cycles is estimated.

Once the basic blocks are compiled, they are stored in the cache 102 for fast lookup. For example, when another user input is received after receiving a user input in response to which the basic blocks are compiled, and the same basic blocks can be used for servicing the other user input, the basic blocks can be accessed from the cache 102 quickly and do not need to be regenerated.

In addition, one or more of the basic blocks stored in the cache 102 can be marked as invalid after compilation. The one or more of the basic blocks, marked as invalid, are later validated or invalidated during runtime of the basic blocks. When the one or more of the basic blocks are invalidated, one or more additional basic blocks are compiled. The compilation of the one or more additional basic blocks is sometimes referred to herein as recompiling of the one or more basic blocks.

Each of the one or more additional basic blocks have the same structure as that of the one or more basic blocks 1 through n. For example, each of the one or more additional basic blocks has a source register address, a destination register address, and an operation. As another example, each of the one or more additional basic blocks has a source register address, a destination register address, an operation, and a number of cycles of execution of the operation of the additional basic block. In the example, some of the one or more additional basic blocks include an invalid mark. As yet another example, each of the one or more additional basic blocks has a source register address, a destination register address, an operation, and a number of cycles of execution of the operation of the additional basic block. It should be noted that each of the additional blocks of code is executed in the same manner as each of the basic blocks 1 through n.

The block dispatcher 302 executes or runs one or more of the basic blocks 1 through n based on a user input. For example, the block dispatcher 302 executes the basic blocks 1 and 2 to service the first user input and executes the basic blocks 3 through 7 in response to the second user input. As an example, the block dispatcher 302 includes a clock source, such as a digital clock oscillator or a clock generator, that counts a number of cycles used to execute one or more of the basic blocks 1 through n based on the user input to generate a real count. The block dispatcher 302 sends the real count to the block compiler 104 to update the estimated count with the real count. For example, the real count is stored in the basic block n for which the real count is calculated. To illustrate, the real count is stored in one or more memory registers of the cache 102 assigned to the basic block n.

In one embodiment, the basic block compiler 104 does not estimate the number of cycles for execution of any basic block. In this embodiment, there is no replacement of the estimated count with the real count. Rather, in the embodiment, the real count is stored by the block compiler 104 in the basic block n for which the real count is determined.

FIG. 4A is a diagram of an embodiment of a system 400 to illustrate compiling of the basic blocks 1 through n within a game console 402. The system 400 includes the game console 402, a server system 404, a computer network 408, and a display device 410. The server system 404 includes one or more servers. As an example, the server system 404 is located within a housing of a data center. The server system 404 includes a memory device 412, which stores emulated PU codes, such as the emulated PU code 104. For example, the memory device 412 stores a game code 1 (gc1), a game code 2 (gc2), and so on until a game code N (gcN). The game code gcN is an example of the emulated PU code 106 (FIG. 1 ). Each game code 1 through N is a legacy code of a legacy game. To illustrate, the game code gc1 is a machine code for play of a first legacy game and the game code gc2 is a machine code for play of a second legacy game. The second legacy game is different from the first legacy game. It should be noted that as an example, the memory device 412 is a memory device of the legacy machine.

As an example, none of the game codes gc1 through gcN can be executed in the updated machine and can be executed in the legacy machine. To illustrate, a CPU or an operating system of the updated machine cannot support execution of the game codes gc1 through gcN. On the other hand, a CPU or an operating system of the legacy machine supports execution of the game codes gc1 through gcN. Examples of a computer network, as used herein, include a wide area and at work (WAN), such as Internet, or a local area network (LAN), such as an intranet, or a combination thereof.

The game console 402 is an example of the updated machine. Examples of the display device 410 include a television, a smart television, and a computer monitor. To illustrate, the display device 410 is a liquid crystal display (LCD) device, or a light emitting diode (LED) display device, or an organic light emitting diode (OLED) display device.

The system 400 further includes a hand-held controller (HHC) 414, which is held in one or two hands of a user 1. Examples of a hand-held controller, as used herein, include a controller with buttons, a Move™ controller from Sony™ Corporation, and a gun-shaped controller. Examples of buttons of the hand-held controller include joysticks, buttons for moving a virtual object upwards, downwards, left, or right on the display screen 410, and other buttons for selection of various features of the legacy game N having the game title GN.

The game console 402 includes a memory device 406, an input processor system 407, and an emulation processor system 409. As an example, a processor system, as used herein, includes one or more processors that are coupled to each other. The emulation processor system 409 is coupled to the memory device 406 and the input processor system 407 is coupled to the emulation processor system 409. The emulation processor system 409 includes the basic block compiler 104 and the cache 102. The basic block compiler 104 is coupled to the cache 102.

The game console 402 is coupled to the display device 410 via a wired communication medium, such as a high definition media interface (HDMI) cable or a wireless connection. Examples of a wireless connection, as used herein, include a Wi-Fi™ connection or a Bluetooth™ connection. Also, the hand-held controller 414 is coupled to the game console 402 via a wired connection or a wireless connection. Examples of a wired connection, as used herein, include a serial transfer cable, a parallel transfer cable, and a Universal Serial Bus (USB) cable.

An example of a client device includes a combination of a hand-held controller, a game console, and a display device. Another example of the client device includes a combination of a hand-held controller and a display device.

The user 1 logs into his/her user account 1 when a user identification (ID) and a password are authenticated by the server system 404. The user account 1 is assigned a user ID1 by the server system 1. Once the user 1 logs into the user account 1, the user 1 can access multiple game titles, such as a game title G1, a game title Ga, a game title G2, and so on until the game title GN. The game titles G1, G2 and so on until the game title GN are examples of titles of legacy games. The game title Ga is a title of a game that is not a legacy game. Rather, the game title Ga is of the current game, such as Fortnite™ that is not available for play in the legacy machine.

After logging into the user account 1, the user 1 selects one or more buttons on the hand-held controller 414 to select the game title GN to play a legacy game N. Once the user 1 selects the game title GN, a user input 418 indicating the selection is sent from the hand-held controller 414 via the game console 402 and the computer network 408 to the server system 404. As an example, a user input is an input signal. Upon receiving the user input 418 indicating the selection of the game title GN, the server system 404 identifies the game code gcN based on the user input 418. For example, the server system 404 identifies that the game code gcN has the same game title as that of the game title GN, a selection of which is indicated in the user input 418.

The server system 404 sends the game code gcN via the computer network 408 to the game console 402. Upon receiving the game code gcN, the emulation processor system 409 stores the game code gcN in the memory device 406 of the game console 402.

When a user input 419 is received, via the wireless connection, from the hand-held controller 414 during a play of the legacy game N having the game code gcN, the input processor system 407 converts the user input 419 into a user input 420 and provides the user input 420 to the emulation processor system 409. As an example, the user input 419 includes a request to move a fighter jet from a position P1 to a position P2 or from one orientation to another orientation during a play of the legacy game N. The fighter jet is an example of a virtual object. Upon receiving the user input 420, the emulation processor system 409 executes the basic block compiler 104 to generate a portion of the game code GCN from a portion of the game code gcN stored in the memory device 406. The portion of the game code GCN is generated based on the user input 420. For example, when the user input 420 includes a request to move the fighter jet from the position P1 to the position P2 during a play of the legacy game N, the basic block compiler 104 parses the game code gcN to identify an instruction that calculates the position P2 from the position P1. The basic block compiler 104 converts the instruction into a basic block of the game code GCN, and the basic block is then executed to change the position of the fighter jet to P2 from P1. Further, in the example, when the position changes from P1 to P2, a virtual environment in which the fighter jet is at the position P1 is modified to a virtual environment in which the fighter jet is at the position P2. In the example, the basic block of the game code GCN is executed by a GPU of the emulation processor system 409 to generate one or more image frames 422. To illustrate, the one or more image frames 422 are displayed on the display device 410 to display a virtual environment having the fighter jet at the position P2. In this manner, a majority or the entirety of the game code GCN is compiled by the basic block compiler 104 and stored in the cache 102 for execution. As an example, a virtual environment, such as a virtual scene, includes one or more virtual reality (VR) images or one or more augmented reality (AR) images.

In an embodiment, communication of data between the server system 404 and the game console 402 occurs via a network communication protocol, such as a Transmission Control Protocol over Internet Protocol (TCP/IP). For example, the server system 404 includes a network interface controller (NIC) to convert data into packets. The network interface controller of the server system 404 is coupled to the memory device 412 to receive data from the memory device 412. Upon receiving the data from the memory device 412, the network interface controller of the server system 404 embeds the data within one or more packets by applying the network communication protocol to the data. The one or more packets are transferred from the network interface controller of the server system 404 via the computer network 408 to the game console 402. A network interface controller of the game console 402 extracts the data from the one or more packets by applying the network communication protocol. The network interface controller of the game console 402 is coupled to the emulation processor system 409. The network interface controller of the game console 402 provides the data received from the computer network 408 to the emulation processor system 409. Moreover, the network interface controller of the game console 402 receives data from the emulation processor system 409 and embeds the data within one or more packets by applying the network communication protocol and sends the one or more packets via the computer network 408 to the server system 404. The network interface controller of the server system 404 applies to network communication protocol to the one or more packets received from the computer network 408 to extract the data from the one or more packets and sends the data to the memory device 412 for storage. Examples of a network interface controller include a network interface card, an Ethernet card, and a network adapter. To illustrate, the network interface controller of the game console 402 enables the input processor system 407 to communicate with the computer network 408.

In one embodiment, in addition to or instead of the computer network 408, a cellular network is used to communicate data between the server system 404 and the game console 402. For example, communication between the server system 404 and the game console 402 is facilitated using wireless technologies. The wireless technologies include, for example, 4G or 5G wireless communication technologies. As used herein, 5G is the fifth generation of cellular network technology. Also, 5G networks are digital cellular networks, in which a service area covered by providers is divided into small geographical areas called cells. In 5G wireless communication technology, analog signals representing sounds and images are digitized in a telephone, converted by an analog-to-digital converter and transmitted as a stream of bits. All 5G wireless devices in a cell communicate by radio waves with a local antenna array and low power automated transceiver (transmitter and receiver) in the cell, over frequency channels assigned by the transceiver from a pool of frequencies that are reused in other cells. Local antennas are connected with the cellular network by a high bandwidth optical fiber or wireless backhaul connection. As in other cell networks, a mobile device crossing from one cell to another is automatically transferred to the new cell. It should be understood that 5G networks are just an example type of a communication network, and embodiments of the disclosure may utilize earlier generation wireless or wired communication, such as 3G or 4G, as well as later generation wired or wireless technologies that come after 5G.

In an embodiment, any of the game console 402 and the server system 404 is referred to herein as a computing device. Other examples of the computing device include a tablet, a smartphone, a laptop computer, a desktop computer, and a smart television.

In one embodiment, each of the game codes gc1 through gcN is stored in a separate memory device of the server system 404 or of a legacy machine. For example, the game code gc1 is stored in a memory device of a first legacy machine and the game code gc2 is stored in a memory device of a second legacy machine. As another example, the game code gc1 is stored in a first memory device of the server system 404 and the game code gc2 is stored in a second memory device of a server system 404.

In an embodiment, the memory device 412 or the memory device 406 is not a cache. Rather, each of the memory device 412 or the memory device 406 is a main memory, such as a RAM.

In one embodiment, the memory device 412 is coupled to a memory controller. The memory controller reads data from the memory device 412 and writes data to the memory device 412. The memory controller is coupled to the network interface controller of the server system 404. The memory controller sends data received from the network interface controller of the server system 404 to the memory device 412 for storage. The memory controller also sends data received from the memory device 412 to the network interface controller of the server system 404 for sending via the computer network 408 to the game console 402.

FIG. 4B is a diagram of an embodiment of a system 450 to illustrate that the emulation processor system 409 and the input processor system 407 are located within the server system 404, and the one or more image frames 422 are sent from the server system 404 via the computer network 408 to the display device 410 for display of a virtual environment or a virtual scene. The system 450 includes the server system 404, display device 410, and the hand-held controller 414.

The server system 404 includes the memory device 412, the input processor system 407, and the emulation processor system 409. The memory device 412 is coupled to the emulation processor system 409 and the input processor system 407 is coupled to the emulation processor system 409. The display device 410 is coupled to the computer network 408 via a network interface controller of the display device 410. The display device 410 includes a processor that is coupled to the network interface controller of the display device 410. The processor of the display device 410 receives the user input 419 during a play of the legacy game N having the game title GN and the game code gcN, and sends the user input 419 to the network interface controller of the display device 410. The network interface controller of the display device 410 sends the user input 419 via the computer network 408 to the input processor system 407 of the server system 404.

Upon receiving the user input 419, the input processor system 407 converts the user input 419 into the user input 420 and provides the user input 420 to the emulation processor system 409. Upon receiving the user input 420, the emulation processor system 409 performs the same functions as described above with reference to FIG. 4A with respect to the game code gcN to compile the basic blocks 1 through N for generation of the one or more image frames 422. The server system 404 sends the one or more image frames 422 via the computer network 408 to the display device 410 for display of a virtual environment, such as a virtual environment 452, on a display screen of the display device 410. For example, the virtual environment 452 includes a virtual object 454, which is an example of the fighter jet. In the example, the virtual environment 452 includes a virtual background, which includes one or more virtual objects, such as a virtual pyramid 455 and a virtual structure 456. In this example, the virtual object 454 is capable of shooting virtual missiles at the virtual pyramid 455 and the virtual structure 456 during a play of the legacy game N having the game code gcN.

In an embodiment, communication of data between the server system 404 and the display device 410 occurs via the network communication protocol. For example, the server system 404 includes the network interface controller to convert data into packets. The network interface controller of the server system 404 is coupled to the emulation processor system 409 to receive data from the emulation processor system and embeds the data within one or more packets by applying the network communication protocol. The packets are transferred from the network interface controller of the server system 404 via the computer network 408 to the display device 410. The network interface controller of the display device 410 extracts the data from the one or more packets by applying the network communication protocol. The network interface controller of the display device is coupled to the processor of the display device 410. The network interface controller of the display device provides the data received from the computer network 408 to the processor of the display device 410. The processor of the display device 410 renders data, such as the image frames 422, on the display screen of the display device 410. Moreover, the network interface controller of the display device 410 receives data from the processor of the display device 410 and embeds the data within one or more packets by applying the network communication protocol and sends the one or more packets via the computer network 408 to the server system 404. The network interface controller of the server system 404 applies to network communication protocol to the one or more packets received from the computer network 408 to extract the data from the one or more packets and sends the data to the emulation processor system 409.

In one embodiment, in addition to or instead of the computer network 408, a cellular network is used to communicate data between the server system 404 and the display device 410. For example, communication between the server system 404 and the display device is facilitated using the wireless technologies.

In an embodiment, instead of the display device 410, a head-mounted display (HMD) is used. The head-mounted display is worn on the user 1's head and includes a display screen, such as an LED screen or an OLED screen or an LCD screen. The HMD performs the same functions as that performed by the display device 410.

FIG. 5A is a diagram to illustrate an embodiment of a basic block. Each basic block includes a source register address, a destination register address, and an operation. For example, the basic block 1 includes a source register address 1, a destination register address 1, and an operation 1. The basic block 2 includes a source register address 2, a destination register address 2, and an operation 2 and the basic block n includes a source register address n, a destination register address n, and an operation n. As an example, a source register address is an address of one or more source registers within the cache 102 and a destination register addresses is an address of one or more destination registers within the cache 102. Examples of an operation of a basic block include a jump operation, and branch operation, a read operation, a write operation, a compare operation, and a return operation. Further examples of an operation of a basic block include an arithmetic operation, such as an add operation, a subtract operation, a multiply operation, and a divide operation.

As an example, when the operation n is the read operation, data is read from the source register address n to execute the basic block n. As another example, when the operation n is a write operation, data is written to the destination register address n to execute the basic block n. As another example, when the operation n is a move operation, data is read from the source register address n, the operation n is performed on the data, and the data is written is to the destination register address n to execute the basic block n. As yet another example, when the operation n is the compare operation, a first value of data stored at a first source register address mentioned in the basic block n is compared with a second value of data stored at a second source register address mentioned in the basic block n to generate a comparison result and the comparison result is stored at the destination register address n to execute the basic block n. As another example, when the operation n is the add operation, a first value of data stored at the first source address mentioned within the basic block n is added to a second value of data stored at the second source address indicated within the basic block n to generate an add result and the add result is stored at the destination register address n to execute the basic block n. As yet another example, when a virtual object, described herein, is to move from the position P1 to the position P2 and the operation n is the write operation in which the position of the virtual object is to be updated from P1 to P2, the position P1 at the destination register address n is overwritten with the position P2 to execute the basic block n. In the example, the execution of the basic block n indicates to the emulation processor system 409 that the virtual object is to move from the position P1 to the position P2. Also, in the example, the user input 420 (FIG. 4A) instructs the emulation processor system 409 to move the virtual object from the position P1 to P2. Similarly, as another example, when a virtual object, described herein, is to move from an orientation O1 to an orientation O2 and the operation n is the write operation in which the orientation of the virtual object is to be updated from 01 to 02, the orientation O1 at the destination register address n is overwritten with the orientation O2 to execute the basic block n. In the example, the execution of the basic block n indicates to the emulation processor system 409 that the virtual object is to move from the orientation O1 to the orientation O2. Further, in the example, the user input 420 instructs the emulation processor system 409 to move the virtual object from the orientation O1 to O2.

As still another example, when a portion of a virtual object, described herein, is to change color from red to green and the operation n is the write operation in which the color of the virtual object is to be updated from red to green, data representing the color red at the destination register address n is overwritten with data representing the color green to execute the basic block n. In the example, the execution of the basic block n indicates to the emulation processor system 409 that the color of the portion of the virtual object is to be changed from red to green. Also, in the example, the user input 420 instructs the emulation processor system 409 to change the color of the portion of the virtual object from red to green. In a similar manner, other parameters, such as intensity and texture, can be modified based on the user input 420.

Each basic block includes a number of cycles of execution of the basic block. For example, the basic block 1 includes a number of cycles 1 of execution of the basic block 1. As another example, the basic block 2 includes a number of cycles 2 of execution of the basic block 2 and the basic block n includes a number of cycles n of execution of the basic block n. As an example, an estimated number of cycles of execution of the basic block is estimated by the basic block compiler 104 (FIG. 1 ) upon compiling the basic block. In the example, the estimated number of cycles is stored in the basic block. Also in the example, after the basic block is executed by the block dispatcher 302 (FIG. 3 ), the block dispatcher 302 updates the estimated number of cycles of execution in the manner described above with the real count and provides the real count to the block compiler 104. The estimated number of cycles is replaced by the real count in the basic block by the block compiler 104. As another example, the real count of a number of cycles of execution of the operation n is generated by the block dispatcher 302 and stored in the basic block n. In this example, there is no estimation of a number of cycles of execution of the operation n.

Moreover, as another example, one or more of the basic blocks 1 through n include an invalid mark indicating that the one or more of the basic blocks 1 through n be checked for validity. For example, the basic block n includes an invalid mark n.

It should be noted that by converting the emulated PU code 106 into the basic blocks 1 through n of the game code GCN, a hook, such as a hook block, can be inserted between any two of the basic blocks 1 through n. For example, a hook block n can be inserted between the basic blocks (n−1) and n. The hook block n has the same structure as that of the basic block n. For example, the hook block includes a source register address, a destination register address, an operation, and a number of cycles of execution of the operation of the hook block. As an example, due to security issues associated with the legacy machine, a hook, as described herein, cannot be inserted between instructions of the emulated PU code 106 (FIG. 1 ) stored in the legacy machine for execution on the legacy machine.

It should further be noted that the basic blocks 1 through n are keyed into, such as fixed within, the cache 102 (FIG. 1 ). For example, the basic block 1 has a start memory address 1, which indicates a location of start of the basic block 1 in the cache 102. Also, the basic block 1 has an end memory address 1, which indicates a location of end of the basic block 1 in the cache 102. As another example, the end address 1 of the basic block 1 is indicated by an offset in the cache 106 from the start memory address 1. As yet another example, the basic block 2 has a start memory address 2, which indicates a location of start of the basic block 2 in the cache 102. Also, the basic block 2 has an end memory address 2, which indicates a location of end of the basic block 2 in the cache 102. As another example, the end address 2 of the basic block 2 is indicated by an offset in the cache 106 from the start memory address 2. Similarly, as another example, the basic block n has a start memory address n, which indicates a location of start of the basic block n in the cache 102. Also, the basic block n has an end memory address n, which indicates a location of end of the basic block n in the cache 102. As another example, the end address n of the basic block n is indicated by an offset in the cache 106 from the start memory address n. From the start and end memory addresses, stored in the cache 102, of the basic blocks 1 through n, the emulation processor system 409 (FIG. 4A), such as the basic block compiler 102, can identify the locations of the basic blocks 1 through n in the cache 102.

It should also be noted that in case a user input indicating that the block dispatcher 302 of the updated machine execute the basic block n immediately after executing the basic block 1, the block dispatcher 302 skips execution of the basic blocks 2 through (n−1) in the cache 102 and jumps to the basic block n from the basic block 1. In this case, execution of the basic block 1 is closed by the block dispatcher 302 when the block dispatcher 302 jumps to the basic block n. Also, in this case, a start address of a next basic block is consecutive to an end address of a preceding basic block. For example, the start address 2 is consecutive to the end address 1 and the start address n is consecutive to an end address (n−1) of the basic block (n−1).

In an embodiment, the source register addresses 1 through n are memory addresses of registers of the cache 102 and the destination register addresses 1 through n are memory addresses of registers in the cache 102.

In one embodiment, a basic block includes multiple operations. For example, the basic block n includes a first operation, a first source register address, and a first destination register address. The basic block n further includes a second operation, a second source register address, and a second destination register address.

In an embodiment, a basic block includes an operation, multiple source addresses, and a destination address.

In one embodiment, a basic block includes an operation, multiple destination addresses, and a source address.

In an embodiment, a basic block includes multiple operations, multiple source addresses, and multiple destination addresses.

In an embodiment, a basic block includes one or more operations, one or more source addresses, and one or more destination addresses.

In an embodiment, a basic block includes either a source register address or a destination register address but not both.

In one embodiment, the block compiler 102 does not estimate the number of cycles for execution of the basic block n. Rather, the block dispatcher 302 generates the real count of the number of cycles of execution of the basic block n and stores the real count in the basic block n.

FIG. 5B is a diagram to illustrate an embodiment of a compile operation performed by the basic block compiler 104 (FIG. 1 ). An example of an emulated PU code instruction M is illustrated as an instruction 550 and an example of the basic block n is illustrated as a basic block 552, where M is a positive integer. The instruction 550 includes a source address M having a length of a bits, a destination address M having a length of b bits, and an operation M represented by bits of length c, where a, b, and c are positive integers. As an example, a is 4, b is 4, and c is 32. As an example, the a bits, b bits, and c bits are stored in the one or more memory devices of the legacy machine. For example, the a bits are stored in the memory device 406 or 412 (FIGS. 4A and 4B). The operation 552 includes the source register address n having a length of d bits, the destination address n having a length of e bits, and the operation n represented by bits of length f, where d, e, and f are positive integers. As an example, d is 8, e is 8, and f is 64. As an example, the d bits, e bits, and f bits are stored in the one or more registers of the updated machine. As an example, d is greater than a, e is greater than b, and f is greater than c. To illustrate, d is 8, e is 8, and f is 64 when a is 4, b is 4, and c is 32. As another example, d is 16, e is 16, and f is 128 when a is 4, b is 4, and c is 32.

To perform the compile operation, the basic block compiler 104 (FIG. 1 ) converts the source address M into the source register address n, the destination address M into the destination register address n, and the operation M into the operation n to generate the basic block n from the emulated PU code instruction M. For example, the basic block compiler 104 shifts 4 bits of the source address M to the right to occupy 4 memory addresses of 8 source registers in the cache 102 and masks any bits in remaining four memory addresses of the 8 source registers. The four memory addresses occupied by the 4 bits of the source address M are at the least significant positions of the 8 source registers in the cache 102 and the remaining four memory addresses in which the bits are masked are at the most significant positions of the 8 source registers in the cache 102.

As another example, the basic block compiler 104 shifts 4 bits of the destination address M to the right to occupy 4 memory addresses of 8 destination registers in the cache 102 and masks any bits in remaining four memory addresses of the 8 destination registers. The four memory addresses occupied by the 4 bits of the destination address m are at the least significant positions of the 8 destination registers in the cache 102 and the remaining four memory addresses in which the bits are masked are at the most significant positions of the 8 destination registers in the cache 102.

Similarly, as another example, the basic block compiler 104 shifts 32 bits of the operation M to the right to occupy 32 memory addresses of 64 operation registers in the cache 102 and masks any bits in remaining 32 memory addresses of the 64 operation registers. The 32 memory addresses occupied by the 32 bits of the operation M are at the least significant positions of the 32 operation registers in the cache 102 and the remaining 32 memory addresses in which the bits are masked are at the most significant positions of the 64 operation registers in the cache 102. The operation n is stored in the operation registers of the cache 102.

FIG. 6A is a diagram of an embodiment of a system 600 to illustrate components of the emulation processor system 409. The system 600 includes the memory device 412 and the emulation processor system 409. The basic block compiler 104 of the emulation processor system 409 includes a parser or decoder 602. The basic block compiler 104 further includes a block creator 604, a block cacher 606A, and a block reader 608. The emulation processor system 409 includes the block dispatcher 302.

As an example, each of the parser 609, the block creator 604, the block cacher 606, the block reader 608, and the block dispatcher 302 is implemented using software, or hardware, or a combination thereof. For example, each of the parser 609, the block creator 604, the block cacher 606, the block reader 608, and the block dispatcher 302 is a separate integrated circuit, such as a PLD or an ASIC or a controller or a processor or a portion of a computer program. As another example, each of the parser 609, the block creator 604, the block cacher 606, the block reader 608, and the block dispatcher 302 is a separate computer software program.

The game code gcN includes multiple instructions, such as an emulated PU code instruction 1, an emulated PU code instruction 2 and so on until the emulated PU code instruction M. For example, each instruction of the game code gcN is a series of bits that can be executed by the processor of the legacy machine to implement a function, such as moving a virtual object from the position P1 to the position P2, or changing an orientation of the virtual object from O1 to O2, or modifying the parameter of a portion of the virtual object.

The parser 602 is coupled to the block creator 604, which is coupled to the block cacher 606 and to the block reader 608. The block cacher 606 and the block reader 608 or coupled to the cache 102. The block reader 608 is coupled to the block dispatcher 302.

FIG. 6B is a flowchart to illustrate an embodiment of a method 650 for compiling and executing the basic blocks 1 through n. The method 650 is illustrated using the system 600 of FIG. 6A. In an operation 652 of the method 650, the block creator 604 determines whether any user input, such as a user input 1, is received. As an example, the user input 1 is a signal that is generated based on one or more identifications of one or more buttons of the hand-held controller 414 (FIG. 4A) that are selected by the user 1. As another example, the user input 1 is a signal that is generated based on a measure of movement, such as pitch, yaw, and roll, with respect to an origin of an xyz co-ordinate system centered on the hand-held controller 414. As yet another example, the user input 1 is a signal that is generated based on a measure of movement, such as pitch, yaw, and roll, with respect to an origin of an xyz co-ordinate system of the HMD. An example of the user input 1 is the user input 420 (FIG. 4A).

The block creator 604 continues to check whether the user input is received in the operation 652 upon determining that the user input is not received. For example, the basic block compiler 104 does not run any of basic blocks (n+1) through p stored in the cache 102 (FIG. 1 ) and the basic block compiler 104 (FIG. 1 ) does not identify any of the emulated PU code instructions 1 through M (FIG. 6A) when the user input is not received in the operation 652, where p is a positive integer. It is assumed that at a time the user input is received in the operation 652, the basic blocks 1 through n are not generated and are not stored in the cache 102.

On the other hand, in response to determining that the user input is received in the operation 652, in an operation 654 of the method 650, the block creator 604 determines whether one or more of the basic blocks (n+1) through p that are stored in the cache 102 satisfy the user input. For example, the block creator 604 sends a request to the block reader 608 to access the basic blocks (n+1) through p from the cache 102. In the example, the block reader 608, upon receiving the request, reads the basic blocks (n+1) through p from the cache 102 and sends the basic blocks (n+1) through p to the block creator 604. Further, in the example, the block creator 604 determines whether functionality of one or more of the basic blocks (n+1) through p satisfies, such as services, the user input 1. To illustrate, when the user input 1 indicates to change a position of a virtual object from the position P1 to the position P2, the block creator 604 determines whether any of the basic blocks (n+1) through p include an operation of overwriting the position P1 with the position P2. Upon determining that one or more of the basic blocks (n+1) through p include the operation of overwriting the position P1 with P2, the block creator 604 determines that one or more functionalities of the one or more of the blocks (n+1) through p satisfies the user input 1. On the other hand, upon determining that none of the basic blocks (n+1) through p include the operation of overwriting the position P1 with P2, the block creator 604 determines that functionalities of the basic blocks (n+1) through p do not satisfy the user input 1.

As another illustration, when the user input 1 is to change an orientation of a virtual object from the orientation O1 to the orientation O2, the block creator 604 determines whether any of the basic blocks (n+1) through p include an operation of overwriting the orientation O1 with the orientation O2. Upon determining that one or more of the basic blocks (n+1) through p includes the operation of overwriting the orientation O1 with O2, the block creator 604 determines that one or more functionalities of the one or more of the basic blocks (n+1) through p satisfies the user input 1. On the other hand, upon determining that none of the basic blocks (n+1) through p includes the operation of overwriting the orientation O1 with O2, the block creator 604 determines that functionalities of the basic blocks (n+1) through p do not satisfy the user input 1. As yet another illustration, when the user input 1 is to change a value of the parameter of a portion of a virtual object from a first value to a second value, the block creator determines whether any of the basic blocks (n+1) through p include an operation of overwriting the first value with the second value. Upon determining that one or more of the basic blocks (n+1) through p include the operation of overwriting the first value with the second value, the block creator 604 determines that one or more functionalities of the one or more of the basic blocks (n+1) through p satisfies the user input 1. On the other hand, upon determining that none of the basic blocks (n+1) through p include the operation of overwriting the first value at the second value, the block creator 604 determines that functionalities of the basic blocks (n+1) through p do not satisfy the user input 1.

Upon determining that the functionalities of one or more of the basic blocks (n+1) through p satisfy the user input 1, in an operation 656 of the method 600, the block dispatcher 302 executes the one or more of the basic blocks (n+1) through p. For example, upon determining that the functionalities of one or more of the basic blocks (n+1) through p satisfy the user input 1, the block creator 604 sends an instruction to the block dispatcher 302 to execute the one or more of the basic blocks (n+1) through p. In the example, in response to receiving the instruction, the block dispatcher 302 sends a command to the block reader 608 to read the one or more of the basic blocks (n+1) through p from the cache 102 for satisfying the user input received in the operation 652. Also, in the example, upon receiving the one or more of the basic blocks from the cache 102 in response to the command, the block dispatcher 302 executes the one or more of the basic blocks (n+1) through p.

On the other hand, upon determining that the functionalities of the blocks (n+1) through p do not satisfy the user input 1, in an operation 658 of the method 600, the block compiler 102 identifies one or more of the emulated PU code instructions 1 through M for servicing the user input received in the operation 652. For example, upon determining that the functionalities of the blocks (n+1) through p do not satisfy the user input 1, the block creator 604 sends a request to the parser 602 to parse the game code gcN to identify and obtain one or more of the emulated PU code instructions 1 through M of the game code gcN that satisfy the functionality identified in the user input 1. In the example, in response to receiving the request, the parser 602 accesses the memory device 412 to parse the game code gcN to determine whether functionalities of one or more of the emulated PU code instructions 1 through M satisfy the user input 1 and upon determining that the functionalities of one or more of the emulated PU code instructions 1 through M satisfy the user input 1, the parser 602 provides the one or more of the emulated PU code instructions 1 through M to the block creator 604.

To illustrate, when the user input 1 is to change a position of a virtual object from the position P1 to the position P2, the parser 602 determines whether any of the emulated PU code instructions 1 through M include an operation of overwriting the position P1 with the position P2. Upon determining that one or more of the emulated PU code instructions 1 through M include the operation of overwriting the position P1 with P2, the parser 602 determines that one or more functionalities of the one or more of the emulated PU code instructions 1 through M satisfies the user input 1. On the other hand, upon determining that none of the emulated PU code instructions 1 through M includes the operation of overwriting the position P1 with P2, the parser 602 determines that functionalities of the emulated PU code instructions 1 through M do not satisfy the user input 1.

As another illustration, when the user input 1 is to change an orientation of a virtual object from the orientation O1 to the orientation O2, the parser 602 determines whether any of the emulated PU code instructions 1 through M include an operation of overwriting the orientation O1 with the orientation O2. Upon determining that one or more of the emulated PU code instructions 1 through M includes the operation of overwriting the orientation O1 with O2, the parser 602 determines that one or more functionalities of the one or more of the emulated PU code instructions 1 through M satisfies the user input 1. On the other hand, upon determining that none of the emulated PU code instructions 1 through M includes the operation of overwriting the orientation O1 with O2, the parser 602 determines that functionalities of the emulated PU code instructions 1 through M do not satisfy the user input 1. As yet another illustration, when the user input 1 is to change a value of the parameter of a portion of a virtual object from a first value to a second value, the parser 602 determines whether any of the emulated PU code instructions 1 through M include an operation of overwriting the first value with the second value. Upon determining that one or more of the emulated PU code instructions 1 through M include the operation of overwriting the first value with the second value, the parser 602 determines that one or more functionalities of the one or more of the emulated PU code instructions 1 through M satisfies the user input 1. On the other hand, upon determining that none of the emulated PU code instructions 1 through M include the operation of overwriting the first value at the second value, the parser 602 determines that functionalities of the emulated PU code instructions 1 through M do not satisfy the user input 1.

In an operation 660 of the method 600, when the one or more of the emulated PU code instructions 1 through M that satisfy the user input 1 are received from the parser 602, the block creator 604 applies the compile operation, described above, to generate one or more of the basic blocks 1 through n from the one or more of the emulated PU code instructions 1 through M. For example, the block creator 604 compiles the one or more of the basic blocks 1 through n, sends the one or more of the basic blocks 1 through n to the block cacher 606, and sends an instruction to the block dispatcher 302 to execute the one or more of the basic blocks 1 through n. Upon receiving the one or more of the basic blocks 1 through n, the block cacher 606 stores the one or more of the basic blocks 1 through n in the cache 102.

In an operation 662 of the method 600, upon receiving the instruction from the block creator 604 to execute the one or more of the basic blocks 1 through n, the block dispatcher 302 runs the one or more of the basic blocks 1 through n to service the user input received in the operation 652. For example, the block dispatcher 302 sends a request to the block reader 608 to read the one or more of the basic blocks 1 through n from the cache 102. Upon receiving the command, the block reader 608 reads the one or more of the basic blocks 1 through n from the cache 102 and provides the one or more of the basic blocks 1 through n to the block dispatcher 302. Upon receiving the one or more of the basic blocks 1 through n, the block dispatcher 302 executes the one or more of the basic blocks 1 through n to generate the virtual environment 452 (FIG. 4B). To illustrate, the block dispatcher 302 executes the one or more of the basic blocks 1 through n to generate an image frame, which includes virtual environment data, such as a position and an orientation of the virtual object 454, the parameter of the virtual object 454, positions and orientations of other virtual objects in the virtual environment 452, and the parameter of the other virtual objects in the virtual environment 452. Further, in the example, when the position or the orientation or a combination thereof of the virtual object 454 changes, a virtual environment changes. The block dispatcher 302 provides the image frame to the GPU of the emulation processor system 409 to display, such as render, the virtual environment 452 on the display screen of the display device 410 (FIG. 4A). The method 600 repeats, when another user input, such as the user input 2, is received after the user input 1 is received in the operation 652.

FIG. 6C is a diagram of an embodiment of a system 670 to illustrate that for different user inputs, different basic blocks or different sets of basic blocks are compiled dynamically. The system 670 includes the memory device 412, the basic block compiler 104, the block dispatcher 302, and the cache 102. When the user input 1 is received by the basic block compiler 104, the basic block compiler 104 determines if the basic block 1 that corresponds to the user input 1 is stored in the cache 102. For example, the basic block 1 corresponds to the user input 1 when the basic block 1 includes a function for servicing the user input 1. To illustrate, when the user input 1 is to move a virtual object from the position P1 to the position P2 and the basic block 1 includes an operation of updating the position P1 stored at the destination register address 1 with the position P2, the basic block 1 can service the user input 1. In the illustration, the user input 1 is a signal indicating a selection of a move to right button or a move to left button or a move up button or a move down button on the hand-held controller 414 (FIG. 4A). Similarly, the basic block 2 does not correspond to the user input 1 when the basic block 2 does not include a function for servicing the user input 1. To illustrate, when the user input 1 is to move a virtual object from the position P1 to the position P2 without changing an orientation of the virtual object and the basic block 2 includes an operation of updating the orientation O1 stored in the destination register 2 with the orientation O2, the basic block 2 cannot service the user input 1. Upon determining that the basic block 1 that can service the user input 1 is stored in the cache 102, the basic block compiler 104 provides the basic block 1 to the block dispatcher 302 for executing the basic block 1.

On the other hand, upon determining that the basic block 1 is not stored in the cache 102, the basic block compiler 104 parses the emulated PU code 106 stored in the memory device 412 to identify the emulated PU code instruction 1 corresponding to the user input 1. For example, the basic block compiler 104 parses the emulated PU code 106 to identify that the emulated PU code instruction 1 satisfies, such as services, the user input 1. To illustrate, when the user input 1 is to move a virtual object from the position P1 to the position P2 and the emulated PU code instruction 1 includes a function of updating the position P1 stored at the destination address 1 with the position P2, the emulated PU code instruction 1 can service the user input 1. Similarly, the emulated PU code instruction 2 does not correspond to the user input 1 when the emulated PU code instruction 2 does not include a function for servicing the user input 1. To illustrate, when the user input 1 is to move a virtual object from the position P1 to the position P2 without changing an orientation of the virtual object and the emulated PU code instruction 2 includes an operation of updating the orientation O1 stored at the destination address 2 with the orientation O2, the emulated PU code instruction 2 cannot service the user input 1.

Upon determining that the emulated PU code instruction 1 can service the user input 1 and the emulated PU code instruction 2 cannot service the user input 1, the basic block compiler 104 accesses, such as reads, the emulated PU code instruction 1 from the memory device 412 and compiles the basic block 1 from the emulated PU code instruction 1. The basic block compiler 102 does not compile the basic block 2 from the emulated PU code instruction 2 in response to receiving the user input 1. The basic block compiler 104 stores the basic block 1 in the cache 102 and sends an instruction to the block dispatcher 302 to access and execute the basic block 1. Upon receiving the instruction, block dispatcher 302 reads the basic block 1 from the cache 102 and runs the basic block 1.

Similarly, when the user input 2 is received by the basic block compiler 104, the basic block compiler 104 determines if the basic block 2 that corresponds to the user input 2 is stored in the cache 102. For example, the basic block 2 corresponds to the user input 2 when the basic block 2 includes a function for servicing the user input 2. To illustrate, when the user input 2 is to move a virtual object from the orientation O1 to the orientation O2 and the basic block 2 includes an operation of updating the orientation O1 stored at the destination register address 2 with the orientation O2, the basic block 2 can service the user input 2. In the illustration, the user input 2 is a signal indicating a selection of a rotate clockwise or a rotate counterclockwise button on the hand-held controller 414. Similarly, the basic block 1 does not correspond to the user input 2 when the basic block 1 does not include a function for servicing the user input 2. To illustrate, when the user input 2 is to move a virtual object from the orientation O1 to the orientation O2 without changing a position of the virtual object and the basic block 1 includes an operation of updating the position P1 stored in the destination register 1 with the position P2, the basic block 1 cannot service the user input 2. Upon determining that the basic block 2 can service the user input 2 is stored in the cache 102, the basic block compiler 104 provides the basic block 2 to the block dispatcher 302 for executing the basic block 2.

On the other hand, upon determining that the basic block 2 is not stored in the cache 102, the basic block compiler 104 parses the emulated PU code 106 stored in the memory device 412 to identify the emulated PU code instruction 2 corresponding to the user input 2. For example, the basic block compiler 104 parses the emulated PU code 106 to identify that the emulated PU code instruction 2 satisfies, such as services, the user input 2. To illustrate, when the user input 2 is to move a virtual object from the orientation O1 to the orientation O2 and the emulated PU code instruction 2 includes a function of updating the orientation O1 stored at the destination address 2 with the orientation O2, the emulated PU code instruction 2 can service the user input 2. Similarly, the emulated PU code instruction 1 does not correspond to the user input 2 when the emulated PU code instruction 1 does not include a function for servicing the user input 2. To illustrate, when the user input 2 is to move a virtual object from the orientation O1 to the orientation O2 without changing a position of the virtual object and the emulated PU code instruction 1 includes an operation of updating the position P1 stored in the destination address 1 with the position P2, the emulated PU code instruction 1 cannot service the user input 2.

Upon determining that the emulated PU code instruction 2 can service the user input 2 and the emulated PU code instruction 1 cannot service the user input 2, the basic block compiler 104 accesses, such as reads, the emulated PU code instruction 2 from the memory device 412 and compiles the emulated PU code instruction 2 to generate the basic block 2. The basic block compiler 102 does not compile the emulated PU code instruction 1 in response to receiving the user input 2. The basic block compiler 104 stores the basic block 2 in the cache 102 and sends an instruction to the block dispatcher 302 to access and execute the basic block 2. Upon receiving the instruction, block dispatcher 302 reads the basic block 2 from the cache 102 and runs the basic block 2.

FIG. 7A is a diagram of an embodiment of a system 700 to illustrate deletion of the emulated PU code 106 from the memory device 412. The system 700 includes the block creator 604, an instruction remover 702, and the memory device 412. Examples of the instruction remover 702 include a processor, an ASIC, a PLD, a computer program, a portion of a computer program, and a microcontroller. The instruction remover 702 is coupled to the block creator 604 and to the memory device 412.

FIG. 7B is a flowchart to illustrate an embodiment of a method 720 for deleting the emulated PU code 106 (FIG. 6C) from the memory device 412 (FIG. 6C). The method 720 includes an operation 702 for determining whether all instructions of the emulated PU code 106 are compiled. For example, the block creator 604 (FIG. 7A) determines whether all of the emulated PU code instructions 1 through M of the game code gcN are compiled. To illustrate, before compiling any of the emulated PU code instructions 1 through M of the game code gcN, the block creator 604 sends a request to the processor of the legacy machine to obtain identities of all of the emulated PU code instructions 1 through M of the game code gcN. In the illustration, the block creator 604 sends an identity, such as one or more bits, of the game code gcN to the processor of the legacy machine to obtain identities of all of the emulated PU code instructions 1 through M of the game code gcN. Examples of the identities of the emulated PU code instructions 1 through M include one or more bits. To illustrate, the identity of the emulated PU code instruction M is represented by a first sequence of bits and the identity of the emulated PU code instruction M−1 is represented by a second sequence of bits, which is different from the first sequence. Upon receiving the identities of the emulated PU code instructions 1 through M from the processor of the legacy machine, the block creator 604 stores the identities in a table in the cache 102. As each of the emulated PU code instructions 1 through M is compiled, the block creator 604 updates the table to include indications that identify which of the emulated PU code instructions 1 through M are compiled. The block creator 604 determines whether all of the emulated PU code instructions 1 through M are compiled from the indications that identify which of the emulated PU code instructions 1 through M are compiled.

Upon determining that all the emulated PU code instructions 1 through M of the game code gcN are compiled, the block creator 604 sends a command to the instruction remover 702 (FIG. 7A) to delete the game code gcN from the memory device 412. Upon receiving the command, in an operation 724 of the method 720, the instruction remover 702 erases the emulated PU code instructions 1 through M from the memory device 412.

On the other hand, upon determining that one or more of the emulated PU code instructions 1 through M of the game code gcN are not compiled based on the table, in an operation 726 of the method 720, the block creator 604 does not send the command to the instruction remover 702 to delete the game code gcN from the memory device 412. Until the command to delete the game code gcN is received, the instruction remover 702 does not delete the emulated PU code instructions 1 through M from the memory device 412.

In one embodiment, the block creator 604 determines whether the game code gcN is accessed from the memory device 412 (FIG. 4A) within a pre-determined time period, which is stored in the cache 102, from the latest time the game code gcN is accessed from the memory device 412. As an example, the block creator 604 can access the Internet clock via the computer network 408 to determine the latest time and the pre-determined time period. As another example, the block creator 604 includes a clock source, such as a clock oscillator, to count the latest time and the pre-determined time period. Upon determining that the game code gcN is not accessed from the memory device 412 within the pre-determined time period, the block creator 604 sends a command to the instruction remover 702 to delete the game code gcN from the memory device 412. As an example, when the game code gcN is not accessed within the pre-determined time period, a majority of emulated PU code instructions 1 through M are accessed by the basic block compiler 104 to compile one or more of the basic blocks 1 through n. As another example, when the game code gcN is not accessed within the pre-determined time period, a number of emulated PU code instructions 1 through M that are frequently used during a play of the legacy game N having the game title GN are accessed by the basic block compiler 104 to compile one or more of the basic blocks 1 through n. On the other hand, upon determining that the game code gcN is accessed within the pre-determined time period, the block creator 604 does not send the command to the instruction remover 702 and the game code gcN is not deleted from the memory device 412.

FIG. 8A is a diagram of an embodiment of an emulation processor system 800 to illustrate validation of basic blocks. The emulation processor system 800 is an example of the emulation processor system 409 (FIG. 4B). The emulation processor system 800 includes the basic block compiler 104, the cache 102, a block validator 802 and a block flagger 804. The block validator 802 is coupled to the block creator 604, the block dispatcher 302, the parser 602, and the block flagger 804. Each of the clock validator 802 and the block flagger 804 is coupled to the cache 102.

As an example, the block validator 802 is implemented as an ASIC, or a PLD, or a microcontroller, or a processor, or a computer program, or a portion of a computer program. Also as an example, the block flagger 804 is implemented as an ASIC, or a PLD, or a microcontroller, or a processor, or a computer program, or a portion of a computer program.

In one embodiment, the terms ASIC, PLD, microcontroller, microprocessor, controller, and processor are used herein interchangeably.

FIG. 8B is a flowchart of an embodiment of a method 850 to illustrate a validation operation performed by the emulation processor system 800 (FIG. 8A). In an operation 852 of the method 800, the block validator 802 (FIG. 8A) determines whether the basic block n is compiled. For example, the block validator 802 accesses, such as reads, the cache 102 to determine whether a new basic block, such as the basic block n, is now stored in the cache 102 compared to the basic blocks 1 through n−1 previously stored in the cache 102. The block validator 802 previously identified the basic blocks 1 through n−1 stored in the cache 102. Upon determining that the basic block n is not cached, the block validator 802 continues to access the cache 102 to determine whether the new basic block is cached. For example, the block validator 802 periodically parses the basic blocks 1 through n−1 stored in the cache 102 to determine whether the basic block n is stored in the cache 102.

Upon determining that the basic block n is cached, the block validator 802 creates, in an operation 854 of the method 800, a first hash value from the one or more of the emulated PU code instructions 1 through M from which the basic block n is compiled. For example, the block validator 802 sends a request to the parser 602 to obtain the one or more of the emulated PU code instructions 1 through M from the memory device 412. The request includes identities of memory addresses of the basic block n in the cache 102. The identities of the memory addresses of the basic block n are received, such as obtained by request, from the block creator 604 by the block validator 602. The parser 602, upon receiving the request from the block validator 802, reads the one or more of the emulated PU code instructions 1 through M from the memory device 412 and provides the one or more of the emulated PU code instructions 1 through M to the block validator 802. To illustrate, when the one or more of the emulated PU code instructions 1 through M are provided to the basic block compiler 104 for compiling the basic block n, the parser 602 stores a one-to-one correspondence between one or more identities of one or more memory addresses occupied by the basic block n in the cache 102 and one or more identities of one or more memory addresses occupied by the one or more of the emulated PU code instructions 1 through M in the memory device 412. The parser 602 receives the identities of the memory addresses of the basic block n in the cache 102 from the block validator 802 and identifies the one or more memory addresses of the one or more of the emulated PU code instructions 1 through M in the memory device 412 from the one-to-one correspondence. The parser 602 reads the one or more of the emulated PU code instructions 1 through M from the one or more memory addresses of the memory device 412 and provides the one or more of the emulated PU code instructions 1 through M to the block validator 802.

Continuing with the example, upon receiving the one or more of the emulated PU code instructions 1 through M from the parser 602, the block validator 802 generates the first hash value from the one or more of the emulated PU code instructions 1 through M and stores the first hash value in the cache 102. To illustrate, the block validator 802 generates a digest or a checksum from the one or more of the emulated PU code instructions 1 through M corresponding to the basic block n. In the example, the first hash value is stored in one or more registers, of the cache 102, that are keyed to include the basic block n.

In an operation 856 of the method 800, the block validator 802 sends a command to the parser 602 to determine whether the one or more memory addresses, within the memory device 412, at which the one or more of the emulated PU code instructions 1 through M are stored, are overwritten. The one or more memory addresses, within the memory device 412, can be overwritten with data from a compact disc-read only memory (CD-ROM) of the legacy machine. The data can be an update to the one or more of the emulated PU code instructions 1 through M. The update to the one or more of the emulated PU code instructions 1 through M is referred to as updated instructions. Alternatively, the data can be corrupted data, which is not the updated instructions. The parser 602, upon receiving the command from the block validator 802 sends a request to the processor of the legacy machine to determine whether the one or more memory addresses, within the memory device 412, at which the one or more of the emulated PU code instructions 1 through M are stored are overwritten.

Upon receiving the request from the parser 602, the processor of the legacy machine provides a response to the request and the response indicates whether the one or more memory addresses, within the memory device 412, at which the one or more of the emulated PU code instructions 1 through M are stored are overwritten. Upon receiving the response that the one or more memory addresses, within the memory device 412, at which the one or more of the emulated PU code instructions 1 through M are stored are not overwritten, the block validator 802 sends a command to the block flagger 804 (FIG. 8A) to not mark the basic block n as invalid. Upon receiving the command, in an operation 858 of the method 800, the block flagger 804 does not mark the basic block n as invalid.

On the other hand, upon receiving the response that the one or more memory addresses, within the memory device 412, at which the one or more of the emulated PU code instructions 1 through M are stored are overwritten, in an operation 860 of the method 850, the block validator 802 sends a command to the block flagger 804 (FIG. 8A) to mark the basic block n as invalid. Upon receiving the command to mark the basic block n as invalid, the block flagger 804 marks the basic block n as invalid. For example, the block flagger 804 accesses the basic block n within the cache 102 and includes an identifier, such as the invalid mark n (FIG. 5A), within the memory addresses in the cache 102 having the basic block n to indicate that the basic block n is invalid. An example of the invalid mark n is a sequence of bits.

In one embodiment, a hash value is an example of a validation result.

FIG. 8C is a continuation of the flowchart of the method 800 of FIG. 8B. In an operation 862 of the method 800, the block validator 802 (FIG. 8A) determines whether the basic block n is to be executed. For example, the block dispatcher 302 sends an indication to the block validator 802 that the basic block n is to be executed. Upon receiving the indication from the block dispatcher 302 that the basic block n is to be executed, the block validator 802 determines that the basic block n is to be executed. Until the indication is received, the block validator 802 does not determine that the basic block n is to be validated.

Upon determining that the basic block n is to be executed, the block validator 802, in an operation 864 of the method 800, determines whether the basic block n is marked as invalid. For example, the block validator 802 sends a command to the block flagger 804 to determine whether the basic block n is flagged as invalid. Upon receiving the command, the block flagger 804 sends an indication to the block validator 802 whether the basic block n is flagged as invalid. To illustrate, the block flagger 804 accesses the basic block n to determine whether the basic block n includes the invalid mark n to generate and send the indication of invalidity to the block validator 802. As another illustration, the block flagger 804 accesses the basic block n to determine whether the basic block n does not include the invalid mark n to generate and send the indication of lack of invalidity to the block validator 802. Upon receiving the indication from the block flagger 804 that the basic block n is marked as invalid, the block validator 802 determines that the basic block n is invalid. On the other hand, upon receiving the indication from the block flagger 804 that the basic block n lacks the invalid mark n, the block validator 802 determines that the basic block n is not marked as invalid.

Upon determining that the basic block n is not marked as invalid, in an operation 866 of the method 800, the basic block n is executed. For example, the operation 866 is similar to the operation 662 (FIG. 6B). To illustrate, the block validator 802 sends a command to the block dispatcher 302 to execute the basic block n. Upon receiving the command to execute the basic block n, the block dispatcher 302 runs the basic block n. In this illustration, until the command is received from the block validator 802 for execution of the basic block n, the block dispatcher 302 does not execute the basic block n.

On the other hand, in response to determining that the basic block n is marked as invalid, in an operation 866 of the method 800, the block validator 802 determines whether the basic block n is actually valid. For example, upon determining that the basic block n is marked as invalid, the block validator 802 creates a second hash value from either the updated instructions or the corrupted data stored in the same memory addresses, within the memory device 412, at which the one or more of the emulated PU code instructions 1 through M from which the basic block n is compiled are stored. In the example, the second hash value is stored in one or more registers, of the cache 102, that are keyed to include the basic block n. To illustrate, the block validator 802 sends a request to the parser 602 to obtain the updated instructions or the corrupted data stored at the one or more memory addresses within the memory device 412. The parser 602, upon receiving the request, reads the updated instructions or the corrupted data from the one or more memory addresses from the memory device 412, and provides the updated instructions or the corrupted data to the block validator 802. In the illustration, the block validator 802 generates the second hash value from the updated instructions or the corrupted data and stores the second hash value in the cache 102. For example, the block validator 802 generates a digest or a checksum from the updated instructions or the corrupted data. In the illustration, the block validator 802 compares the second hash value with the first hash value to determine whether the basic block n is valid. Upon determining, based on the comparison, that there is a match between the first hash value and the second hash value, the block validator 802 determines that the basic block n is valid. The match occurs when the second hash value is generated from the updated instructions. On the other hand, upon determining, based on the comparison, that there is a lack of match between the first hash value and the second hash value, the block validator 802 determines that the basic block n is invalid. The lack of match occurs when the second hash value is generated from the corrupted data.

In response to determining that the basic block n is valid, in an operation 870 of the method 800, the invalid mark n is removed. For example, the block validator 802 sends a command to the block flagger 804 to remove the invalid mark n from the basic block n stored in the cache 102. Upon receiving the command from the block validator 802, the block flagger 804 accesses the basic block n from the cache 102 and erases the invalid mark n from the basic block n. To illustrate, the block flagger 804 erases the invalid mark n from one or more memory addresses of the cache 102 in which the invalid mark n is stored. Upon removing the invalid mark n, the block flagger 804 sends a command to the block dispatcher 302 to execute the basic block n, and upon receiving the command, in the operation 866, the block dispatcher 302 runs the basic block n. As an example, the block dispatcher 302 does not execute the basic block n until the command to execute the basic block n is received from the block flagger 804.

On the other hand, upon determining that the basic block n is not valid, in an operation 872 of the method 800, an additional basic block, having the same functionality or operation as the basic block n, is compiled. For example, the block validator 802 sends a command to the block dispatcher 302 to not execute the basic block n and sends an indication to the block creator 604 that the basic block n is invalid. Upon receiving the indication, the block creator 604 recompiles the basic block n. To illustrate, the block creator 604 compiles the additional basic block in the same manner as that of compiling the basic block n from one of the more of the emulated PU code instructions 1 through M stored in the memory device 412 except that the additional basic block is compiled from an additional set of emulated PU code instructions, such as one or more of the emulated PU code instructions 1 through M, stored within a memory device of an additional legacy machine. The additional legacy machine is different from the legacy machine that includes the memory device 412. Also, the additional set of emulated PU code instructions are of the same game title GN as that of the game code gcN. As another illustration, the block creator 604 compiles the additional basic block in the same manner as that of compiling the basic block n from one of the more of the emulated PU code instructions 1 through M stored in the memory device 412 except that the additional basic block is compiled from an additional set of emulated PU code instructions, such as one or more of the emulated PU code instructions 1 through M, stored within different memory addresses of the memory device 412 than memory addresses, of the memory device 412, at which the emulate PU code instructions 1 through M are stored. As yet another illustration, the block creator 604 compiles the additional basic block in the same manner as that of compiling the basic block n from one of the more of the emulated PU code instructions 1 through M stored in the memory device 412 except that the additional basic block is compiled from an additional set of emulated PU code instructions, such as one or more of the emulated PU code instructions 1 through M, stored within a different memory device than the memory device 412.

The additional basic block is sent from the block creator 604 to the block dispatcher 302 for execution. For example, the block dispatcher 302 executes the additional basic block to generate a portion of an additional virtual environment, such as the virtual environment 452 (FIG. 4B). To illustrate, the block dispatcher 302 executes the additional basic block to generate a portion of an image frame, which includes additional virtual environment data, such as a position and an orientation of the virtual object 454, the parameter of the virtual object 454, positions and orientations of other virtual objects in the virtual environment 452, and the parameter of the other virtual objects in the additional virtual environment. The block dispatcher 302 provides the image frame to the GPU of the emulation processor system 409 to display, such as render, the additional virtual environment on the display screen of the display device 410.

It should be noted that although the method 850 is illustrated with reference to the basic block n and the additional basic block, the method 850 is equally applicable to other basic blocks 1 through (n−1) and more additional basic blocks, which are generated in the same manner in which the additional basic block is generated.

In one embodiment, the set of emulated PU code instructions 1 through M are stored in a first set of one or more memory devices, located outside the legacy machine, and the additional set of emulated PU code instructions is stored in a second set of one or more memory devices, located outside the additional legacy machine.

FIG. 9A is a diagram to illustrate an embodiment of a legacy machine 900. The legacy machine 900 includes a legacy CPU 902, a legacy GPU 904, a memory device 906, and a CD-ROM drive 908. The memory device 906 is an example of the memory device 412 (FIG. 4A). An example of the legacy CPU 902 is a 32-bit CPU that can process at most 32 bits during one clock cycle. Also, example of the legacy GPU 904 is a 32-bit GPU that can process at most 32 bits during one clock cycle. An example of the memory device 906 is a 2 megabyte (MB) RAM.

The legacy CPU 902 and the legacy GPU 904 are coupled to the memory device 906, which is coupled to the CD-ROM drive 908. The emulated PU code 106 is stored within the memory device 906.

The legacy CPU 902 or the legacy GPU 904 access the emulated PU code 106 from the memory device 906 and processes the emulated PU code 106. The CD-ROM drive 908 receives a CD-ROM, which includes the updated instructions or the corrupted code. The updated instructions or the corrupted code can be transferred from the CD-ROM to the memory device 906 by the legacy CPU 902.

In one embodiment, the legacy machine 900 excludes a cache. In an embodiment, the legacy machine 900 includes a cache of limited capacity, such as a 4 kilobyte (KB) cache.

In an embodiment, the legacy machine 900 is not currently being manufactured by an entity, such as a company or a corporation, but has been manufactured by the entity in the past.

FIG. 9B is a diagram to illustrate an embodiment of an updated machine 920. The updated machine 920 includes a CPU 922, a GPU 924, a memory system 926, and a cache 928, which is an example of the cache 102 (FIG. 1 ). The game console 402 (FIG. 4B) is an example of the updated machine 920. As an example, the CPU 922 includes two quad-core modules and each module can process 64 bits during each clock cycle. Each core has a 32 kilobyte (KB) cache. Another example of the CPU 922 is a 64-bit CPU that can process at most 64 bits during one clock cycle. As an example, the GPU 924 has 1152 cores and each core can process 64-bits during one clock cycle. As another example, the legacy GPU 924 is a 64-bit GPU that can process at most 64 bits during one clock cycle.

The CPU 922 and the GPU 924 are coupled to the memory system 906. As an example, the emulated PU code 106 is stored within the legacy memory system 906. An example of the memory system 926 includes is a hard drive that provides a storage of 500 gigabytes (GB), or 2 terabytes (TB). The CPU 922, the GPU 924, the cache 928, and the memory system 926 are coupled to each other via a bus 930.

The CPU 922 or the GPU 924 accesses the cache 928 first before accessing the memory system 926. Upon determining that the cache 928 does not data that is requested by the CPU 922 or the GPU 924, the CPU 922 or the GPU 924 accesses the memory system 926.

It should be noted that in one embodiment, the game code gcN cannot be executed by the CPU 922 or the GPU 924 but can be executed by the legacy CPU 902 or the legacy GPU 904. Also, the basic blocks 1 through n can be executed by the CPU 922 or the GPU 924 but cannot be executed by the legacy CPU 902 or the legacy GPU 904.

In one embodiment, the cache 928 is located within the CPU 922.

In an embodiment, the cache 928 is located within the GPU 924.

In one embodiment, the cache 928 is located within the CPU 922 and another cache, such as the cache 102, is located within the GPU 924.

In an embodiment, the updated machine 920 is currently being or has recently been manufactured by the entity. For example, the updated machine 920 is manufactured by the entity years are manufacturing the legacy machine 900.

FIG. 10A is a diagram of an embodiment of a system 1000 to illustrate combining of multiple basic blocks into one basic block by the basic block compiler 104 (FIG. 1 ). The block creator 604 (FIG. 6A) receives the user input 1, such as a signal indicating that the virtual object 454 (FIG. 4B) be initiated at the position P1 and the orientation O1 at a level 1 of the legacy game N having the game title GN. Upon receiving the user input 1, the basic block 1 is generated by the basic block compiler 104 based on the emulated PU code instruction 1 to service the user input 1. Similarly, the block creator 604 receives the user input 2, such as a signal indicating that the virtual object 454 be initiated at the position P1 and the orientation O1 at a level 2 of the legacy game N. Upon receiving the user input 2, the basic block 2 is generated by the basic block compiler 104 based on the emulated PU code instruction 2 to service the user input 2.

When a user input 3, such as a signal indicating that the virtual object 454 be initiated at the position P1 and the orientation O1 at a level 3 of the legacy game N, is received, the block compiler 104 identifies the basic blocks 1 and 2 as servicing the user input 3. Upon identifying so, the block creator 604 integrates, such as combines, the basic blocks 1 and 2 into a single basic block, such as the basic block 1 or the basic block 2. The integration saves memory space in the cache 102 and also increases efficiency in accessing the single basic block instead of accessing the basic block 1 and the basic block 2.

The block creator 604 further generates a value in a pointer of the cache 102. An example of a pointer, as used herein, is a register. The pointer indicates to the block dispatcher 302 to execute the single basic block when a user input for servicing the basic block 1 or the basic block 2 is received. At a time the block dispatcher 302 is to execute the basic block 1 or 2, the block dispatcher 302 accesses the pointer and executes the single basic block instead of the basic block 1 or 2.

FIG. 10B is a diagram of an embodiment of a system 1020 to illustrate modification of one or more of the basic blocks 1 through n. The system 1020 includes a block interface 1022, the cache 102, and the block dispatcher 302. As an example, the basic block n includes the operation n of dead reckoning. As another example, the basic block n includes the operation n of bouncing back a crosshair from an edge of the display screen of the display device 410 (FIG. 4B). An example of the block interface 1022 is an ASIC, or a PLD, or a microprocessor, or a microcontroller, or a computer program, or a portion of a computer program. The block interface 1022 is coupled to the cache 102.

The block interface 1022 provides access to the user to one or more of the basic blocks 1 through n stored in the cache 102. For example, the user selects one or more buttons on an input device, such as a keyboard or a mouse or a keypad, to generate a modification input 1024. As an example, the modification input 1024 includes one or more user instructions in the form of source code to modify the basic block n. To illustrate, the modification input 1024 includes a user instruction to remove the operation n of dead reckoning from the basic block n. As another example, the modification input 1024 includes an instruction to change the operation n to include that the cross hair slides off the edge of the display screen of the display device 410 and is displayed at an opposite edge of the display screen of the display device 410. The opposite edge is diagonally opposite to the edge at which the cross hair slides off.

The input device is coupled to the block interface 1022. The modification input 1024 is sent from the input device to the block interface 1022 to modify the basic block n to output a modified basic block n. As an example, the modified basic block n does not include the operation of dead reckoning. As another example, the modified basic block n includes the operation n of sliding off the crosshair from the edge to the opposite edge. As yet another example, the modified basic block n includes an operation of calculating a number of clock cycles of execution of the operation n and storing the number in the basic block n. To illustrate, the number of cycles is stored in memory addresses of the cache 102 in which the basic block 1 is stored. The operation of calculating the number of clock cycles is executed by the block dispatcher 302 (FIG. 3 ) in addition to executing the operation n. The block dispatcher 302 calculates the number of clock cycles upon execution of the operation n and stores the number in the basic block n.

The block creator 604 further generates a value in a pointer within the cache 102, and the pointer indicates to the block dispatcher 302 to execute the modified basic block n when a user input for servicing the basic block n is received. At a time the block dispatcher 302 is to execute the basic block n, the block dispatcher 302 accesses the pointer and executes the modified basic block n instead of the basic block n.

FIG. 10C is a diagram of an embodiment of a system 1030 to illustrate combining of a basic block created based on a subroutine with a basic block generated based on an emulated PU code instruction, which calls the subroutine. The block creator 604 (FIG. 6A) receives the user input 1, such as a signal indicating a change in a position and/or an orientation of the virtual object 454 (FIG. 4B) that results in a destruction of the virtual object 454. Upon receiving the user input 1, the basic block 1 is generated by the basic block compiler 104 based on the emulated PU code instruction 1 to service the user input 1. The emulated PU code instruction 1 includes a function call to a subroutine 1. As such, upon receiving the user input 1, the basic block 2 is generated by the basic block compiler 104 based on the subroutine 1, which is an example of the emulated PU code instruction 2. As an example, the basic block 2 includes the operation 2 of regenerating the virtual object 454 at the position P1 and the orientation O1.

When a user input 2, such as a signal indicating a change in a position and/or an orientation of the virtual object 454 (FIG. 4B) that results in a destruction of the virtual object 454, is received, the block compiler 104 identifies the basic blocks 1 and 2 as servicing the user input 2. Upon identifying so, the block creator 604 integrates, such as combines, the basic blocks 1 and 2 into a single basic block, such as the basic block 1 or the basic block 2. For example, upon receiving the user input 2, the destruction of the virtual object 454 and the regeneration of the virtual object 454 are triggered. When the basic blocks 1 and 2 are combined, the subroutine 1 is skipped.

The block creator 604 further generates a value and stores the value in a pointer within the cache 102. The value indicates to the block dispatcher 302 to execute the single basic block when a user input for servicing the basic blocks 1 and 2 is received. At a time the block dispatcher 302 is to execute the basic blocks 1 and 2, the block dispatcher 302 accesses the pointer and executes the single basic block instead of the basic block 1.

FIG. 10D is a diagram of an embodiment of a system 1040 to illustrate an insertion of a basic block between two basic blocks. The system 1040 includes the block interface 1022 and the cache 102. After the basic blocks 1 and 2 are stored in the cache 102, a modification input 1042 is received from the user via the input device. As an example, the modification input 1042 is a signal including a source code that defines a basic block 1.1, which includes a source register address 1.1 within the cache 102, a destination register address 1.1 within the cache 102, and an operation 1.1 to be performed on data stored within the source register address 1.1, or on the destination register address 1.1, or both the source and destination register addresses 1.1. Examples of the operation 1.1 include jump, store, load, branch, and an arithmetic operation.

The modification input 1042 further includes an indication of a location of the basic block 1.1 and an association of the basic block 1.1 with the basic block 1 or 2. For example, the modification input 1042 includes a signal indicating that the basic block 1.1 is to be inserted between the basic blocks 1 and 2 in the cache 102 and a signal indicating that the basic block 1.1 is to be linked to the basic blocks 1 and/or 2. To illustrate, the basic block 1.1 is inserted to include a location, such as one or more register addresses, in the cache 102, for receiving an invalid mark 2 of the basic block 2. As another illustration, the basic block 1.1 is inserted to include a location, such as one or more register addresses in the cache 102, for receiving a number of cycles of execution of the basic block 2. In the illustration, the block interface 1022 receives the modification input 1042, identifies, from the modification input 1042 that the basic block 1.1 is to be inserted between the basic blocks 1 and 2, and inserts the basic block 1.1 between the basic blocks 1 and 2. As another illustration, the block interface 1022 determines that the basic block 1.1 includes an operation for unlocking a level in the legacy game N having the game title GN. The level is between a first level identified in an operation of the basic block 1 and a second level identified in an operation of the basic block 2. The first and second levels are in the legacy game N having the game title GN. The level inserted between the first and second levels is not a part of the game code gcN but is a new level of the legacy game N. An example of the level inserted between the first and second levels is a level in which the virtual object 454 shoots a laser gun instead of missiles.

In addition, the block interface 1022 identifies from the modification input 1042 a value of a pointer and stores the value the cache 102. As an example, the value of the pointer indicates that execution of the basic block 1.1 occur immediately before execution of the basic block 2. When the block dispatcher 302 is to execute the basic block 2, the block dispatcher 302 identifies the value within the pointer to point the basic block 1.1, and executes the basic block 1.1 immediately before executing the basic block 2. As another example, the value of the pointer indicates that execution of the basic block 1.1 occur immediately after execution of the basic block 2. After the block dispatcher 302 executes the basic block 2, the block dispatcher 302 identifies the value within the pointer to point the basic block 1.1, and executes the basic block 1.1 immediately after executing the basic block 2.

FIG. 10E is a diagram of an embodiment of a system 1050 to illustrate a switch in order of execution of basic blocks. The system 1050 includes the cache 102 and the block interface 1022. The cache 102 includes a value within a pointer of the cache 102 and the value indicates that the basic block 2 be executed after executing the basic block 1. The user uses the input device to provide a modification input 1052, which includes a signal indicating that an order of execution of the basic blocks 1 and 2 be switched. Upon receiving the signal, the block interface 1022 changes a value of the pointer in the cache 102 to indicate that the basic block 1 be executed after executing the basic block 2.

FIG. 11A is a flowchart of an embodiment of a method 1100 to illustrate use of the real count of the number of cycles stored in the basic block n. The method 1100 includes the operation 662 of executing the basic block n. In an operation 1102 of the method 1100, the block dispatcher 302 (FIG. 3 ) counts the number of cycles of execution, in the operation 662, of the basic block n to generate a first count. The block dispatcher 302, in an operation 1104 of the method 1100, stores the first count in the basic block n. For example, the block dispatcher 302 writes the real count to a register having one of register addresses, within the cache 102, that are assigned to the basic block n.

In an operation 1106 of the method 1100, the block creator 604 (FIG. 6A) determines whether the same basic block n is to be executed again. For example, the block creator 604 determines whether a user input for servicing the same basic block n is received from the client device. The block creator 604 continues to determine whether the user input for servicing the same basic block n is received until the user input is received.

FIG. 11B is a continuation of the flowchart of the method 1100 of FIG. 11A. Upon determining that the user input for servicing the basic block n is received again, the basic block n is executed again by the block dispatcher 304. In an operation 1108 of the method 1100, the block dispatcher 304 counts a number of cycles of execution, in the operation 1106, of the basic block n, to calculate a second count.

The block dispatcher 304 determines whether the second count is within a pre-determined limit from the first count in an operation 1108 of the method 1100. The pre-determined limit is stored in the cache 102. In response to determining that the second count is not within the pre-determined limit from the first count, in an operation 1110 of the method 1100, the block dispatcher 304 generates a notice. For example, when the block dispatcher 304 is located within the game console 402 (FIG. 4A), the GPU 924 (FIG. 9B) of the game console 402 displays a representation of the notice on the display device 410 (FIG. 4A) of the client device and sends the notice and via the computer network 408 to the server system 404 to notify the server system 404. As another example, when the block dispatcher 304 is located within the server system 404 (FIG. 4B), the block dispatcher 304 generates the notice and a GPU of the server system 404 displays the representation of the notice on a display device that is coupled to the server system 404. On the other hand, determining that the second count is within the pre-determined limit from the first count, in an operation 1112 of the method 1100, the block dispatcher 304 does not trigger the notice.

FIG. 12 is a diagram of an embodiment of a system 1200 to illustrate a transfer of the basic blocks 1 through n from a first client device to a second client device. The system 1200 includes the game console 402, the computer network 408, the server system 404, a game console 1202, and a display device 1204. The game console 1202 is similar to the game console 402. For example, both the game consoles 402 and 1202 are examples of updated machines. As another example, the game console 1202 is not a legacy machine. Also, the display device 1204 is similar to the display device 410 of FIG. 4A. For example, the display device 410 is an HMD or a television or a smart television or a computer monitor.

The game console 402 includes a network interface controller 1212. The game console 1202 includes an emulation processor system 1206, an input processor system 1207, a cache 1208, and a network interface controller 1210. The emulation processor system 1206 has the same structure and same functionality as that of the emulation processor system 409. The input processor system 1207 has the same structure and same functionality as that of the input processor system 407 (FIG. 4A). Also, the cache 1208 has the same structure and the same functionality as that of the cache 102. The emulation processor system 1206, the input processor system 1207, the cache 1208, and the network interface controller 1210 are coupled to each other via a bus 1218.

Once the basic blocks 1 through n are stored in the cache 102, the basic block compiler 104 of the emulation processor system 409 sends the basic blocks 1 through n to the network interface controller 1212. The network interface controller 1212 applies the network communication protocol to the basic blocks 1 through n to generate one or more packets embedding the basic blocks 1 through n and sends the one or more packets via the computer network 408 to the server system 404. Upon receiving the one or more packets, the network interface controller of the server system 404 applies the network communication protocol to the one or more packets to extract the basic blocks 1 through n for the legacy game N having the game title GN and stores the basic blocks 1 through n in one or more memory devices of the server system 404.

A user 2 uses a hand-held controller 1212 to select one or more buttons on the hand-held controller 1212 to log into a user account 2 that is assigned to the user 2 by the server system 404. The user 2 logs into the user account 2 when a user ID2 and a password are authenticated by the server system 404. Once the user 2 logs into the user account 2, the user 2 can access multiple game titles, such as the game title G1, the game title Ga, the game title G2, and so on until the game title GN.

Upon logging into the user account 2, the user 2 uses the hand-held controller 1212 to select one or more buttons on the hand-held controller 1212 to generate a user input 1214. The user input 1214 is generated upon selection of the legacy game N having the title GN displayed on the display device 1204. When the user input 1214 is generated, the cache 1208 does not include the basic blocks 1 through n. For example, upon receiving the user input 1214, a basic block compiler of the emulation processor system 1206 checks the cache 102 to determine whether the cache 102 includes one or more of the basic blocks 1 through n of the game code GCN for servicing the user input 1214. Upon determining that the cache 102 does not include the one or more of the basic blocks 1 through n for servicing the user input 1214, the emulation processor system 1206 generates a request 1220 for the one or more of the basic blocks 1 through n and sends the request 1220 to the network interface controller 1210.

Upon receiving the request 1220, the network interface controller 1210 generates one or more packets embedding the request 1220 by applying the network communication protocol to the request 1220, and sends the one or more packets via the computer network 408 to the server system 404. The network interface controller of the server system 404 receives the one or more packets and applies the network communication protocol to extract the request 1220 from the one or more packets. A processor of the server system 404 analyzes the request 1220 to identify that the basic blocks 1 through n are requested.

In response to determining that the basic blocks 1 through n are requested, the server system 404 accesses the basic blocks 1 through n stored in the one or more memory devices of the server system 404 and provides the basic blocks 1 through n to the network interface controller of the server system 404. The network interface controller of the server system 404 applies the network communication protocol to generate one or more packets embedding the basic blocks 1 through n and sends the one or more packets via the computer network 408 to the game console 1202.

The network interface controller 1210 of the game console 1202 receives the one or more packets having the basic blocks 1 through n, applies the network communication protocol to extract the basic blocks 1 through n from the one or more packets, and sends the basic blocks 1 through n to the emulation processor system 1206. The basic block compiler of the emulation processor system 1206 stores the basic blocks 1 through n in the cache 1208.

When a user input 1224 is received from the hand-held controller 1212 during a play of the game having the game title GN, the input processor system 1207 converts the user input 1224 into a user input 1225 in the same manner in which the input processor system 407 converts the user input 419 into the user input 420. Upon receiving the user input 1225, the basic block compiler of the emulation processor system 1206 identifies one or more of the basic blocks 1 through n within the cache 1208 for servicing the user input 1225. A block dispatcher of the emulation processor system 1206 executes the one or more of the basic blocks 1 through n for servicing the user input 1225. In this manner, once the basic blocks 1 through n are compiled by the emulation processor system 409, the basic blocks 1 through n do not need to be compiled by the emulation processor system 1206 but can be accessed by the emulation processor system 1206 from the server system 404.

FIG. 13 is a diagram of an embodiment of a system 1300 to illustrate emulation of the user input 419 received from the hand-held controller 414 during a play of the legacy game N. The system 1300 includes the input processor system 407, the emulation processor system 409, the hand-held controller 414, and a hand-held controller 1306.

The hand-held controller 1306 is an example of a legacy hand-held controller. As an example, the hand-held controller 1306 can be used with the legacy machine 900 (FIG. 9A) but cannot be used with the updated machine 920 (FIG. 9B). To illustrate, the input processor system 407 includes an input processor 1314, which cannot interpret a user input that is generated by and received from the hand-held controller 1306. To further illustrate, the input processor 1314 is capable of interpreting the user input 419 that is represented by 64 bits or 128 bits but cannot interpret the user input, having 32 bits, received from the hand-held controller 1306. As another example, the hand-held controller 1306 is an example of a legacy controller and the hand-held controller 414 is an example of an updated controller. To illustrate, the hand-held controller 1306 is not currently being manufactured by the entity and the hand-held controller 414 is currently being manufactured by the entity. To further illustrate, the hand-held controller 414 is the latest version and the hand-held controller 1306 is an older version. As another further illustration, the hand-held controller 1306 is manufactured by the entity years before the hand-held controller 414 is manufactured by the entity. As yet another example, the hand-held controller 1306 excludes a thumb stick but includes a Select button and the hand-held controller 414 excludes the Select button. An example of the input processor 1314 is a processor integrated within a serial input/output (I/O) chip.

The input processor system 407 further includes an input emulator 1318, a memory device 1316, and a communication device 1320. Within the memory device 1316, a default mapping 1308 are stored. It should be noted that the default mapping 1308 is associated with the user accounts 1 and 2. For example, when the legacy game N is accessed via the user account 1, unless there is a current mapping stored in the memory device 1316 and selected for use with the user account 1, the default mapping 1308 is applied by the input emulator 1318.

As an example, an input emulator, as described herein, is hardware or software or a combination thereof. To illustrate, an input emulator is a processor, or a PLD, or an ASIC, or a controller. To further illustrate, the input emulator 1318, when implemented within the updated machine 920 enables the updated machine 920 to receive and process user inputs received from the hand-held controller 414 to facilitate a play of the legacy game N. The input emulator 1318 facilitates use of the hand-held controller 414 to play the legacy game N. An example of the communication device 1320 is a communication circuit that applies a close-range communication protocol, such as a wireless transfer protocol or a wired transfer protocol. An example of the wired transfer protocol is a USB protocol and an example of the wireless transfer protocol is a Bluetooth™ protocol. The communication device 1320 is coupled to the input processor 1314, which is coupled to the input emulator 1318. The input emulator 1318 is coupled to the basic block compiler 104. Both the input processor 1314 and the input emulator 1318 are coupled to the memory device 1316.

Also, the hand-held controller 414 is coupled to the input processor 1314 via a connection, such as the wired connection or the wireless connection. An example of the wired connection includes a parallel transfer connection in which information is communication from the hand-held controller 414 to the input processor 1314 simultaneously in a parallel manner.

The user 1 operates one or more input devices on the hand-held controller 414 to select the game title GN to generate the user input 418 (FIG. 4A). Examples of the input devices of the hand-held controller 414 include a left thumb stick 1302A, a right thumb stick 1302B, and one or more buttons. To illustrate, to select the game title GN, a button on the hand-held controller 414 is selected, such as pushed or pressed, by the user 1. Based on the user input 418, the server system 404 sends the game code gcN via the computer network 408 to the game console 402 for storage in the memory device 406 (FIG. 4A) of the game console 402.

During a play of the legacy game N, one or more input devices of the hand-held controller 414 are operated by the user 1 to generate corresponding one or more electrical signals, which eventually form the user input 419. For example, when the user 1 moves a thumb stick of the hand-held controller 414 in a forward direction or a backward direction or a right direction or a left direction, an electrical signal is generated. To illustrate, the forward direction and backward direction are along a y-axis of the xyz co-ordinate system of the hand-held controller 414, and the right and left directions are along an x-axis of the xyz co-ordinate system. In the illustration, the forward direction is opposite to the backward direction and the right direction is opposite to the left direction.

The hand-held controller 414 includes motion sensitive hardware, such as one or more magnetometers, one or more accelerometers, one or more potentiometers, and one or more gyroscopes, that is coupled to the one or more input devices of the hand-held controller 414. The hand-held controller 414 further includes an analog-to-digital converter that is coupled to the motion sensitive hardware. The hand-held controller 414 includes a processor, such as an encoder, that is coupled to the analog-to-digital converter and a communication device that is coupled to the processor. When one or more input devices of the hand-held controller 414 are operated by the user 1, the corresponding electrical signals, such as one or more analog motion sensitive signals, are generated by the motion sensitive hardware. The one or more analog motion sensitive signals are sent from the motion sensitive hardware to the analog-to-digital converter of the hand-held controller 414. The analog-to-digital converter of the hand-held controller 414 converts the analog motion sensitive signals from an analog form to a digital form to output digital motion sensitive signals. The digital motion sensitive signals are sent from the analog-to-digital converter to the processor of the hand-held controller 414.

The processor of the hand-held controller 414 applies an encoding protocol to encode the digital motion sensitive signals to output encoded signals. For example, upon determining that a first digital motion sensitive signal represents a selection of an Options button on the hand-held controller 414, the processor of the hand-held controller 414 encodes the first digital motion sensitive signal using a first frequency. In the example, in response to determining that a second digital motion sensitive signal represents movement of the left thumb stick 1302A of the hand-held controller 414, the processor of the hand-held controller 414 encodes the second digital motion sensitive signal using a second frequency, which is different from, such as greater than or less than the first frequency. Also, in the example, in response to determining that a third digital motion sensitive signal represents movement of the right thumb stick 1302B of the hand-held controller 414, the processor of the hand-held controller 414 encodes the third digital motion sensitive signal using a third frequency, which is different from the first and second frequencies.

The processor of the hand-held controller 414 sends the encoded signals to the communication device of the hand-held controller 414. The communication device of the hand-held controller 414 applies the wireless transfer protocol, such as the Bluetooth™ protocol, to the encoded signals to generate one or more data packets, which are examples of the user input 419. The communication device of the hand-held controller 414 sends the user input 419 via the wireless connection to the communication device 1320 of the input processor system 407.

Upon receiving the user input 419, the communication device 1320 applies the wireless transfer protocol to extract the encoded signals from the one or more data packets, and sends the encoded signals to the input processor 1314. The input processor 1314 parses, such as decodes and analyzes, the encoded signals to determine initial input device information associated with the operation of the hand-held controller 414. For example, the input processor 1314 identifies, based on the one or more digital motion sensitive signals, which of the input devices of the hand-held controller 414 is operated by the user 1, amounts of movements of the input devices, and directions of the amounts of movements. To illustrate, the input processor 1314 determines, from the one or more digital motion sensitive signals generated based on the one or more analog motion sensitive signals received from the accelerometer of the hand-held controller 414, that a specific button, such as the Options button, on the hand-held controller 414 is selected by the user 1. To further illustrate, upon determining that the first digital motion sensitive signal is encoded using the first frequency, the input processor 1314 determines that the Options buttons is selected and in response to determining that the second digital motion sensitive signal is encoded using the second frequency, the input processor 1314 determines that the left thumb stick 1302A is operated by the user 1.

As another illustration, the input processor 1314 determines, from the one or more digital motion sensitive signals generated based on the one or more analog motion sensitive signals received from the accelerometer, gyroscope and the magnetometer of the hand-held controller 414, that a thumb stick is moved in a specific direction, such as the forward, backward, right, or left direction, and that the amount of movement exceeds a pre-determined threshold in the specific direction. In the illustration, the movement in the specific direction and the amount of movement are examples of functionality of the thumb stick. To further illustrate, the input processor 1314 determines that the amount of movement of the left thumb stick 1302A exceeds a pre-determined amount of movement to determine that the amount of movement exceeds the pre-determined threshold. The pre-determined amount of movement is stored in the memory device 1316. Another example of functionality of a button of the hand-held controller 414 is a selection, such as push or press, of the button by the user 1. In the example, the functionality of the button is determined when the button is identified by the input processor 1314 as being operated by the user 1. As another example of functionality of a button of the hand-held controller 414, the input processor 1314 determines a number of times for which a digital motion sensitive signal is generated when the user 1 operates the button. In the example, the number of times is equal to a number of times a digital motion sensitive signal is determined to be received by the input processor 1314 from the hand-held controller 414. Also, in the example, the number of times is equal to a number of times for which the button is selected by the user 1.

The input processor 1314 sends the initial input device information to the input emulator 1318. Upon receiving the initial input device information during the play of the legacy game N, the input emulator 1318 accesses a default mapping 1308 stored within the memory device 1316 to identify one or more of the legacy input devices of the hand-held controller 1306 based on identifiers 1312 of one or more of the updated input devices of the hand-held controller 414. For example, upon receiving the initial input device information, the input emulator 1318 determines from the default mapping 1308, one or more of legacy input device identifiers 1310 corresponding to one or more of updated input device identifiers 1312 of the one or more of the updated input devices of the hand-held controller 414 operated by the user 1. The default mapping 1408 includes a one-to-one correspondence, such as a link, between each of the legacy input devices of the hand-held controller 1306 and a corresponding one of the updated input devices of the hand-held controller 414.

An example of the updated input device identifiers 1312 includes identification characters, such as alphanumeric characters and symbols or bits, which identify one or more of the updated input devices of the hand-held controller 414. To illustrate, the updated input device identifiers 1312 include a symbol for the left thumb stick 1302A and a symbol for the right thumb stick 1302B. As another illustration, the updated input device identifiers 1312 include a symbol for a touchpad on the hand-held controller 414.

An example of the legacy input device identifiers 1310 includes identification characters, such as alphanumeric characters and symbols or bits, which identify one or more of the legacy input devices of the hand-held controller 1306. To illustrate, the updated input device identifiers 1310 include a symbol for a left move button 1304A of the hand-held controller 1306, a symbol for a forward move button 1304B of the hand-held controller 1306, a symbol for a right move button 1304C of the hand-held controller 1306, and a symbol for a backward move button 1304D of the hand-held controller 1306. As another illustration, the legacy input device identifiers 1310 include a symbol for the Select button on the hand-held controller 1306.

In addition, the input emulator 1318 determines one or more functionalities of the one or more legacy input devices of the hand-held controller 1306 from the one or more functionalities of the hand-held controller 414 operated by the user 1. To illustrate, the input emulator 1318 determines that the amount of movement of the left thumb stick 1302A in the left direction exceeding the pre-determined threshold corresponds to a selection of the left move button 1304A thrice by the user 1. As another illustration, the input emulator 1318 determines that the amount of movement of the left thumb stick 1302A in the left direction exceeding a first pre-determined threshold corresponds to a selection of the left move button 1304A twice by the user 1. In the illustration, the input emulator 1318 determines that the amount of movement of the left thumb stick 1302A in the left direction exceeding a second pre-determined threshold corresponds to a selection of the left move button 1304A thrice by the user 1. The second pre-determined threshold is greater or higher than the first pre-determined threshold. As yet another illustration, one or more functionalities of the one or more legacy input devices of the hand-held controller 1306 that are determined from one or more functionalities of the hand-held controller 414 achieve the same result as that achieved by the one or more functionalities of the hand-held controller 414. In the illustration, the one or more functionalities of the one or more legacy input devices of the hand-held controller 1306 and the one or more functionalities of the hand-held controller 414 result in the same amount of movement of a virtual object within the virtual environment 452. An example of the same amount of movement is a movement from one position to another or from one orientation to another or a combination thereof.

The input emulator 1318 generates the user input 420 having one or more of the legacy input device identifiers 1310 that correspond to one or more of the updated input device identifiers 1312 operated by the user 1. Also, the user input 420 includes the one or more functionalities of the one or more legacy input devices identified by the one or more of the legacy input device identifiers 1310. The input emulator 1318 sends the user input 420 to the basic block compiler 104.

The basic block compiler 104 determines, based on the user input 420, whether one or more of the basic blocks 1 through n for servicing the user input 420 are stored in the cache 102 (FIG. 1 ). For example, the basic block compiler 104 determines, based on the user input 420, that one or more of the basic blocks 1 through n, stored in the cache 102, can be executed to move the fighter jet from the position P1 to the position P2 during the play of the legacy game N. To illustrate, the basic block compiler 104 determines that based on a selection of the left move button 1304A that the fighter jet is to be moved from the position P1 to the position P2. The basic block compiler 104 further determines whether according to the selection of the left move button 1304A execution of one or more of the basic blocks 1 through n, stored in the cache 102, will enable the movement of the fighter jet from the position P1 to the position P2.

Upon determining that the one or more of the basic blocks 1 through n for servicing the user input 420 are stored in the cache 102, the basic block compiler 104 sends the instruction to the block dispatcher 302 (FIG. 3 ). The block dispatcher 302, in response to the instruction, executes the one or more of the basic blocks 1 through n from the cache 102 for servicing the user input 420. For example, the one or more of the basic blocks 1 through n are executed to move the fighter jet from the position P1 to the position P2. Moreover, the one or more of the basic blocks 1 through n are executed to generate one or more image frames in which the fighter jet is to move from the position P1 to the position P2.

On the other hand, in response to determining that the one of more of the basic blocks 1 through n for servicing the user input 420 are not stored in the cache 102, the basic block compiler 102 identifies one or more of the emulated PU code instructions 1 through M for servicing the user input 420. The basic block compiler 102 compiles one or more of the emulated PU code instructions 1 through M to generate one or more of the basic blocks 1 through n to service the user input 420, and provides the one or more of the basic blocks 1 through n to the cache 102 for storage. Also, the basic block compiler 102 sends the instruction to the block dispatcher 302 to execute the one or more of the basic blocks 1 thorough n that are recently stored in the cache 102. The one or more of the basic blocks 1 through n are then executed by the block dispatcher 302 for servicing the user input 420.

In one embodiment, the hand-held controller 414 is incompatible with the legacy machine 900 (FIG. 9A). For example, an input processor system of the legacy machine 900 includes an input processor that can interpret a user input generated by and received from the hand-held controller 1306. The input processor system of the legacy system 900 cannot interpret the user input 419 generated by and received from the hand-held controller 414. To further illustrate, the input processor of the legacy system 900 is capable of interpreting the user input that is received from the hand-held controller 1306 and that is represented by 32 bits but cannot interpret the user input 419 that is represented by 64 or 128 bits.

In an embodiment, the input emulator 1318 is a portion of the input processor 1314. For example, the input emulator 1318 is a computer program stored within a cache of the input processor 1314 for execution by a control unit and an arithmetic logic unit (ALU) of the input processor 1314.

In one embodiment, a communication device of the hand-held controller 414 is coupled to the motion sensitive hardware of the hand-held controller 414. The communication device applies the wired transfer protocol to send the digital motion sensitive signals via different channels of the wired connection to a communication device of the input processor system 407. For example, upon receiving the first digital motion sensitive signal that represents movement of the button on the hand-held controller 414, the communication device of the hand-held controller 414 transfers the first digital motion sensitive signal via a first channel, such as a first connection link or a first conductor, of the wired connection. In the example, in response to receiving the second digital motion sensitive signal that represents movement of the left thumb stick 1302A of the hand-held controller 414, the communication device of the hand-held controller 414 transfers the second digital motion sensitive signal via a second channel, such as a second connection link or a second conductor, of the wired connection. Also, in the example, in response to receiving the third digital motion sensitive signal that represents movement of the right thumb stick 1302B of the hand-held controller 414, the communication device of the hand-held controller 414 transfers the third digital motion sensitive signal via a third channel, such as a third connection link or a third wire, of the wired connection.

Continuing with the embodiment, the communication device of the input processor system 407 receives the digital motion sensitive signals and provides the digital motion sensitive signals to the input processor 1314 with channel information. For example, the communication device of the input processor 407 indicates to the input processor 1314 that the first digital motion sensitive signal is received via the first channel, the second digital motion sensitive signal is received via the second channel, and the third digital motion sensitive signal is received via the third channel. The input processor 1314 identifies based on the channels which of the input devices of the hand-held controller 414 is operated by the user 1.

In an embodiment, the hand-held controller 414 is itself an input device. For example, the hand-held controller 414 is moved by the user 1 in the forward direction, the backward direction, the right direction, or the left direction to control a virtual object to move in the direction.

FIG. 14A-1 is a diagram of an embodiment of a system 1400 to illustrate a change from the default mapping 1308 to a current mapping 1404 by the user 1. The system 1400 includes the hand-held controller 414, the input processor system 407, the NIC 1212, the computer network 408, and the server system 404.

The memory device 412 of the server system 404 stores information regarding the user accounts 1 and 2. For example, the memory device 412 stores the user accounts 1 and 2, and validation information to allow logging into the user accounts 1 and 2. As another example, the memory device 412 stores a number of points accumulated within the user account 1 by the user 1 during a play of the legacy game N and the current game having the game title Ga. In the example, the memory device 412 stores a number of points accumulated within the user account 2 by the user 2 during a play of the legacy game N and the current game having the game title Ga.

The user 1 operates one or more of the updated input devices of the hand-held controller 414 and when the one or more of the updated input devices are operated, one or more digital motion sensitive signals are generated in a manner similar to that illustrated above. For example, the user 1 operates one or more of the updated input devices of the hand-held controller 414 to pause the legacy game N. In the example, once the legacy game N is paused, the user 1 operates one or more of the updated input devices of the hand-held controller 414 to change the default mapping 1308 to a current mapping 1414. As another example, before the play of the legacy game N, the user 1 operates one or more of the updated input devices of the hand-held controller 414 to change the default mapping 1308 to the current mapping 1414.

As an example, the default mapping 1308 maps a first identifier of a first one of the updated input devices of the controller 414 to a first identifier of a first one of the legacy input devices of the controller 1306 (FIG. 13 ). Also an example, the default mapping 1308 maps a second identifier of a second one of the updated input devices of the controller 414 to a second identifier of a second one of the legacy input devices of the controller 1306.

The communication device of the hand-held controller 414 generates one or more data packets embedding the one or more digital motion sensitive signals, which indicate that the default mapping 1308 be modified to the current mapping 1414. The communication device of the hand-held controller 414 applies the wireless transfer protocol to generate the one or more data packets. The one or more data packets data packets for changing the default mapping 1308 to the current mapping 1414 are sent from the communication device of the hand-held controller 414 as a user input 1402 via the wireless connection to the communication device 1320.

The communication device 1320 applies the wireless transfer protocol to extract the one or more digital motion sensitive signals for changing the default mapping 1308 to the current mapping 1414 from the one or more packets. The communication device 1320 sends the one or more digital motion sensitive signals for changing the default mapping 1308 to the input processor 1314. Upon receiving the one or more digital motion sensitive signals, the input processor 1314 determines to generate the current mapping 1404 from the default mapping 1308. For example, in response to receiving an indication that the first identifier of the first one of the updated input devices of the controller 414 be mapped to the second identifier of the second one of the legacy input devices of the controller 1306, the input processor 1314 links the first identifier to the second identifier to generate the current mapping 1404, and associates the current mapping 1404 with the input emulator 1318 and the user account 1. As another example, in response to receiving an indication that the second identifier of the second one of the updated input devices of the controller 414 be mapped to the first identifier of the first one of the legacy input devices of the controller 1306, the input processor 1314 links the second identifier to the first identifier to generate the current mapping 1404, and associates the current mapping 1404 with the input emulator 1318.

Moreover, after the current mapping 1404 is generated via the user account 1, the input processor 1314 stores the current mapping 1404 in the memory device 1316 and associates the current mapping 1404 to the user account 1. For example, upon accessing the user account 1, the user 1 can access the current mapping 1404 in addition to the default mapping 1308. To illustrate, when the user 1 logs into the user account 1, after receiving a digital motion sensitive signal indicating the selection of the game title GN, the input processor 1314 provides an option to the user 1 to select between the default mapping 1308 and the current mapping 1404 to play the legacy game N. As another illustration, in response to generating the current mapping 1404, the input processor 1314 instructs the input emulator 1318 to emulate future user inputs received from the hand-held controller 414 during a play of the legacy game N. In the illustration, the future user inputs are received by the input processor system 407 after the user 1 logs into the user account 1. Also, in the illustration, the future user inputs are emulated according to the current mapping 1404 instead of default mapping 1308. To further illustrate, the user 1 logs out of the user account 1 after operating one or more of the updated input devices of the hand-held controller 414 to indicate that the default mapping 1308 be modified to the current mapping 1404. In the further illustration, the user 1 logs into the user account 1 after logging out of the user account 1. Continuing with the further illustration, after the user s1 logs into the user account 1, the input emulator 1318 applies the current mapping 1404 to the future user inputs instead of the default mapping 1308 until a selection of the default mapping 1308 is received from the hand-held controller 414.

FIG. 14A-2 is a diagram of an embodiment of the memory device 1316 to illustrate the default mapping 1308 and the current mapping 1404. The default mapping 1308 maps the legacy input device identifiers 1310 of the legacy input devices of the hand-held controller 1306 (FIG. 13 ), with identifiers of functionalities of the legacy input devices, the updated input device identifiers 1312 of the updated input devices of the hand-held controller 414 (FIG. 13 ), and identifiers of functionalities of the updated input devices. For example, the default mapping 1308 includes a one-to-one correspondence among a legacy input device identifier LID1 of a legacy input device of the hand-held controller 1306, a functionality LIF1 of the legacy input device, an updated input device identifier UID1 of an updated input device of the hand-held controller 1306, and a functionality UIF1 of the updated input device. As another example, the default mapping 1308 includes a one-to-one correspondence among a legacy input device identifier LID2 of a legacy input device of the hand-held controller 1306, a functionality LIF2 of the legacy input device, an updated input device identifier UID2 of an updated input device of the hand-held controller 1306, and a functionality UIF2 of the updated input device. As another yet another example, the default mapping 1308 includes a one-to-one correspondence among a legacy input device identifier LID5 of a legacy input device of the hand-held controller 1306, a functionality LIF5 of the legacy input device, an updated input device identifier UID5 of an updated input device of the hand-held controller 1306, and a functionality UIF5 of the updated input device.

Similarly, the current mapping 1404 maps the legacy input device identifiers 1310 of the legacy input devices of the hand-held controller 1306, with identifiers of functionalities of the legacy input devices, the updated input device identifiers of the updated input devices of the hand-held controller 414, and identifiers of functionalities of the updated input devices. For example, the current mapping 1404 includes a one-to-one correspondence among the legacy input device identifier LID1, the functionality LIF1, the updated input device identifier UID2, and the functionality UIF2 of the updated input device. As another example, the current mapping 1404 includes a one-to-one correspondence among the legacy input device identifier LID2, the functionality LIF2, the updated input device identifier UID1, and the functionality UIF1. It should be noted that in the current mapping 1404, the mapping between the identifiers LID1 and UID1 of the default mapping 1308 is switched to generate the mapping between the identifiers LID1 and UID2. Also, in the current mapping 1404, the mapping between the identifiers LID2 and UID2 of the default mapping 1308 is switched to generate the mapping between the identifiers LID2 and UID1.

In one embodiment, multiple legacy input device identifiers are mapped to one or more updated input device identifiers. For example, multiple legacy input device identifiers that identify the move left button 1304A and the move right button 1304C are mapped to a single updated input identifier of a thumb stick, such as the left thumb stick 1302A or the right thumb stick 1302B (FIG. 13 ), of the hand-held controller 414. As another example, multiple legacy input device identifiers that identify the move forward button 1304B and the move backward button 1304D are mapped to a single updated input identifier of a thumb stick, such as the left thumb stick 1302A or the right thumb stick 1302B, of the hand-held controller 414.

In an embodiment, the default mapping 1308 excludes the identifiers of the functionalities of the legacy input devices of the hand-held controller 1306 and the identifiers of the functionalities of the updated input devices of the hand-held controller 414.

In one embodiment, a mapping, as described herein, includes any number of identifiers for the same number of updated input devices of an updated hand-held controller. Also, the mapping includes any number of identifiers for the same number of legacy input devices of a legacy hand-held controller.

FIG. 14B is a diagram of an embodiment of a system 1450 to illustrate use of the current mapping 1404 instead of the default mapping 1308 (FIG. 13 ) during a play of the legacy game N. The user 1 logs into the user account 1 and selects the current mapping 1404 via one or more of the updated input devices of the hand-held controller 414. Upon receiving a user input indicating the selection of the current mapping 1404 from the hand-held controller 414, the input processor 1314 instructs the input emulator 1318 to apply the current mapping 1404 instead of the default mapping 1308.

During the play of the legacy game N, one or more input devices of the hand-held controller 414 are operated by the user 1 to generate corresponding one or more electrical signals, which eventually form a user input 1452. For example, when the user 1 moves a thumb stick of the hand-held controller 414 in the forward direction or the backward direction or the right direction or the left direction, an electrical signal is generated.

When one or more input devices of the hand-held controller 414 are operated by the user 1, corresponding additional electrical signals, such as one or more additional analog motion sensitive signals, are generated by the motion sensitive hardware. The one or more additional analog motion sensitive signals are sent from the motion sensitive hardware to the analog-to-digital converter of the hand-held controller 414. The analog-to-digital converter of the hand-held controller 414 converts the additional analog motion sensitive signals from an analog form to a digital form to output additional digital motion sensitive signals. The additional digital motion sensitive signals are sent from the analog-to-digital converter to the processor of the hand-held controller 414.

The processor of the hand-held controller 414 applies an encoding protocol to encode the additional digital motion sensitive signals to output additional encoded signals. For example, upon determining that a first additional digital motion sensitive signal represents movement of the Options button on the hand-held controller 414, the processor of the hand-held controller 414 encodes the first additional digital motion sensitive signal using the first frequency. In the example, in response to determining that a second additional digital motion sensitive signal represents movement of the left thumb stick 1302A of the hand-held controller 414, the processor of the hand-held controller 414 encodes the second additional digital motion sensitive signal using the second frequency. Also, in the example, in response to determining that a third additional digital motion sensitive signal represents movement of the right thumb stick 1302B of the hand-held controller 414, the processor of the hand-held controller 414 encodes the third additional digital motion sensitive signal using the third frequency.

The processor of the hand-held controller 414 sends the additional encoded signals to the communication device of the hand-held controller 414. The communication device of the hand-held controller 414 applies the wireless transfer protocol to the additional encoded signals to generate one or more additional data packets, which are examples of a user input 1452. The communication device of the hand-held controller 414 sends the user input 1452 via the wireless connection to the communication device 1320 of the input processor system 407.

Upon receiving the user input 1452, the communication device 1320 applies the close-range communication protocol to extract the additional encoded signals from the one or more additional data packets, and sends the additional encoded signals to the input processor 1314. The input processor 1314 parses, such as decodes and analyzes, the additional encoded signals to determine additional input device information associated with the operation of the hand-held controller 414. For example, the input processor 1314 identifies, based on the one or more additional digital motion sensitive signals, which of the input devices of the hand-held controller 414 is operated by the user 1, an amount of movement of the input device, and a direction of the amount of movement. To illustrate, the input processor 1314 determines, from the one or more additional digital motion sensitive signals, which are generated from the additional analog motion sensitive signals output from the accelerometer of the hand-held controller 414, that a specific button, such as the Options button, on the hand-held controller 414 is selected by the user 1. To further illustrate, upon determining that the first additional digital motion sensitive signal is encoded using the first frequency, the input processor 1314 determines that the Options buttons is selected and in response to determining that the second additional digital motion sensitive signal is encoded using the second frequency, the input processor 1314 determines that the left thumb stick 1302A is operated by the user 1.

As another illustration, the input processor 1314 determines, from the one or more additional digital motion sensitive signals, which are generated from the additional analog motion sensitive signals output from the accelerometer, gyroscope and the magnetometer of the hand-held controller 414, that a thumb stick is moved in a specific direction, such as the forward, backward, right, or left direction, and that the amount of movement exceeds the pre-determined threshold in the specific direction. To further illustrate, the input processor 1314 determines that the amount of movement of the left thumb stick 1302A exceeds the pre-determined amount of movement to determine that the amount of movement exceeds the pre-determined threshold. In the illustration, the movement in the specific direction and the amount of movement are examples of functionality of the thumb stick. Another example of functionality of a button of the hand-held controller 414 is a selection of the button by the user 1. In the example, the functionality of the button is determined when the button is identified by the input processor 1314 as being selected by the user 1. As another example of functionality of a button of the hand-held controller 414, the input processor 1314 determines a number of times for which an additional digital motion sensitive signal is generated when the user 1 operates the button. The number of times is equal to a number of times an additional digital motion sensitive signal is determined to be received by the input processor 1314 from the hand-held controller 414. Also, the number of times is equal to a number of times for which the button is selected by the user 1.

Upon receiving the additional input device information during the play of the legacy game N, the input emulator 1318 accesses the current mapping 1404 stored within the memory device 1316 to identify one or more of the legacy input devices of the hand-held controller 1306 based on the identifiers 1312 of one or more of the updated input devices of the hand-held controller 414. For example, upon receiving the additional input device information, the input emulator 1318 determines from the current mapping 1404, the one or more of legacy input device identifiers 1310 corresponding to one or more of updated input device identifiers 1312 of the one or more of the updated input devices of the hand-held controller 414 operated by the user 1.

In addition, the input emulator 1318 determines one or more functionalities of the one or more legacy input devices of the hand-held controller 1306 from the one or more functionalities of the hand-held controller 414 operated by the user 1 for generating the additional input device information. To illustrate, the input emulator 1318 determines that the amount of movement of the left thumb stick 1302A in the left direction exceeding the pre-determined threshold corresponds to a selection of the left move button 1304A thrice by the user 1. As another illustration, the input emulator 1318 determines that the amount of movement of the left thumb stick 1302A in the left direction exceeding the first pre-determined threshold corresponds to a selection of the left move button 1304A twice by the user 1. In the illustration, the input emulator 1318 determines that the amount of movement of the left thumb stick 1302A in the left direction exceeding the second pre-determined threshold corresponds to a selection of the left move button 1304A thrice by the user 1.

The input emulator 1318 generates a user input 1454 having one or more of the legacy input device identifiers 1310 that correspond to one or more of the updated input device identifiers 1312 of the one or more updated input devices of the hand-held controller 414 operated by the user 1. Also, the user input 1454 includes the one or more functionalities of the one or more legacy input devices identified by the one or more of the legacy input device identifiers 1310. The input emulator 1318 sends the user input 1454 to the basic block compiler 104.

The basic block compiler 104 determines, based on the user input 1454, whether one or more of the basic blocks 1 through n for servicing the user input 1454 are stored in the cache 102 (FIG. 1 ). For example, the basic block compiler 104 determines, based on the user input 1454, that one or more of the basic blocks 1 through n to move the fighter jet from the position P1 to the position P2 during the play of the legacy game N are stored in the cache 102. To illustrate, the basic block compiler 104 determines that based on a selection of the left move button 1304A that the fighter jet is to be moved from a first position to a second position or from a first orientation to a second orientation or a combination thereof. The basic block compiler 104 further determines whether according to the selection of the left move button 1304A execution of one or more of the basic blocks 1 through n, stored in the cache 102, will enable the movement of the fighter jet from the first position to the second position or from the first orientation to the second orientation or a combination thereof.

Upon determining that the one or more of the basic blocks 1 through n for servicing the user input 1454 are stored in the cache 102, the basic block compiler 104 sends the instruction to the block dispatcher 302 (FIG. 3 ). The block dispatcher 302, in response to the instruction, executes the one or more of the basic blocks 1 through n from the cache 102 for servicing the user input 1454. For example, the one or more of the basic blocks 1 through n are executed to move the fighter jet from the first position to the second position or from the first orientation to the second orientation or a combination thereof. Moreover, the one or more of the basic blocks 1 through n are executed to generate one or more image frames in which the fighter jet is to move from the first position to the second position or from the first orientation to the second orientation or a combination thereof.

On the other hand, in response to determining that the one of more of the basic blocks 1 through n for servicing the user input 1454 are not stored in the cache 102, the basic block compiler 102 identifies one or more of the emulated PU code instructions 1 through M for servicing the user input 1454. The basic block compiler 102 compiles one or more of the emulated PU code instructions 1 through M to generate one or more of the basic blocks 1 through n for servicing the user input 1454, and provides the one or more of the basic blocks to the cache 102 for storage. Also, the basic block compiler 102 sends the instruction to the block dispatcher 302 to execute the one or more of the basic blocks 1 thorough n that are recently stored in the cache 102.

In one embodiment, a communication device of the hand-held controller 414 is coupled to the motion sensitive hardware of the hand-held controller 414. The communication device applies the wired transfer protocol to send the additional digital motion sensitive signals via different channels of the wired transfer medium to a communication device of the input processor system 407. For example, upon receiving the first additional digital motion sensitive signal that represents movement of the button on the hand-held controller 414, the communication device of the hand-held controller 414 transfers the first additional digital motion sensitive signal via the first channel of the wired connection. In the example, in response to receiving the second additional digital motion sensitive signal that represents movement of the left thumb stick 1302A of the hand-held controller 414, the communication device of the hand-held controller 414 transfers the second additional digital motion sensitive signal via the second channel of the wired connection. Also, in the example, in response to receiving the third additional digital motion sensitive signal that represents movement of the right thumb stick 1302B of the hand-held controller 414, the communication device of the hand-held controller 414 transfers the third additional digital motion sensitive signal via the third channel of the wired connection.

Continuing with the embodiment, the communication device of the input processor system 407 receives the additional digital motion sensitive signals and provides the additional digital motion sensitive signals to the input processor 1314 with channel information. For example, the communication device of the input processor 407 indicates to the input processor 1314 that the first additional digital motion sensitive signal is received via the first channel, the second additional digital motion sensitive signal is received via the second channel, and the third additional digital motion sensitive signal is received via the third channel. The input processor 1314 identifies based on the channels which of the input devices of the hand-held controller 414 is operated by the user 1.

FIG. 15 is a diagram of an embodiment of a system 1500 to illustrate an identification of the move right button 1302C based on movement of the right thumb stick 1302B. The system 1500 includes the hand-held controller 414, the hand-held controller 1306, the input processor system 407, and the emulation processor system 409.

The hand-held controller 1306 includes a directional pad (Dpad) 1510 and a pad 1512. On the directional pad 1510, the buttons 1302A-1302B are situated. Also, on the pad 1512, a square button, a triangle button, a circle button, and an X button are located. Further, the hand-held controller 1306 includes left shoulder buttons 1506 and right shoulder buttons 1508.

The user 1 moves the right thumb stick 1302 in a right direction 1502. As shown in a blown up view of the right thumb stick 1302B, when the user moves the right thumb stick in the right direction 1502, the moment exceeds a predetermined threshold 1504. The pre-determined threshold 1504 is measured from a center axis 1516, which is a vertical axis that passes through a center of the right thumb stick 1302B. For example, the center axis 1516 passes through a centroid of the right thumb stick 1302B. To illustrate, there is a pre-determined horizontal distance between the center axis 1516 and the predetermined threshold 1504. As an example, the pre-determined threshold 1504 is a vertical axis.

The hand-held controller 414 generates a user input 1514, which includes one or more digital motion sensitive signals, when the movement of the right thumb stick 1302 in a right direction 1502 to exceed the pre-determined threshold 1504. The one or more digital motion sensitive signals indicate that the right thumb stick 1302B moves in the right direction 1502 and exceeds the pre-determined threshold 1504. The user input 1514 is an example of the user input 419 (FIG. 13 ). The user input 1514 is sent from the hand-held controller 414 to the input processor system 407.

The input processor 1314 receives the one or more digital motion sensitive signals embedded within the user input 1514 and determines, based on a frequency channel, that the one or more digital motion sensitive signals identify that the right thumb stick 1302B is moved by the user 1. The frequency channel is used to wirelessly transfer the one or more digital motion sensitive signals embedded within the user input 1514 from the hand-held controller 414 to the input processor system 407. Based on an identifier of the frequency channel, such as a channel having a first frequency or a channel having a second frequency, the one or more digital motion sensitive signals identify that there is movement of the right thumb stick 1302B. For example, when the one or more digital motion sensitive signals are transferred via the channel at the first frequency, the input processor 1314 determines that the right thumb stick 1302B is moved and when the one or more digital motion sensitive signals are transferred via the channel at the second frequency, the input processor 1314 determines that the left thumb stick 1302A is moved. In the example, the second frequency is greater than or less than the first frequency.

Moreover, the input processor 1314 further determines, based on a directionality indicated by the one or more digital motion sensitive signals, that the right thumb stick 1302B has moved in the right direction 1502. For example, the one or more digital motion sensitive signals are output based on one or more analog motion sensitive signals generated by the gyroscope of the hand-held controller 414 and the gyroscope measures the directionality of movement of the right thumb stick 1302B.

Also, the input processor 1314 determines, based on the one or more digital motion sensitive signals output based on one or more analog motion sensitive signals generated by the potentiometer of the hand-held controller 414, an amount of movement of the right thumb stick 1302B in the right direction 1502. The input processor 1314 further determines that the amount of movement of the right thumb stick 1302B exceeds the pre-determined threshold 1504, which is stored in the memory device 1316.

The movement of the right thumb stick 1302B, the movement in the right direction 1502, and the movement in the right direction 1502 exceeding the pre-determined threshold 1504 are examples of input device information, such as the initial input device information or the additional input device information. The input processor 1314 provides the input device information to the input emulator 1318. The input emulator 1318 receives the input device information, and accesses a mapping 1530, such as the default mapping 1308 (FIG. 14A-2 ) or the current mapping 1404 (FIG. 14A-2 ), based on the input device information. For example, upon receiving an indication that the right thumb stick 1302B is moved in the right direction 1502, the input emulator 1318 identifies from the default mapping 1308, that the movement of the right thumb stick 1302B corresponds to a selection of the right move button 1302C. In addition, the input emulator 1318 determines, from the default mapping 1308, that the amount of movement of the right thumb stick 1302B corresponds to a pre-determined number of times, such as two or three or four, of selection of the right move button 1302C.

The input emulator 1318 generates a user input 1520 including information, which indicates operation of the right move button 1302C. The information indicates the selection of the right move button 1302C and the pre-determined number of times for which the right move button 1302C is selected. It should be noted that the right move button 1302C is not actually selected by the user 1. Rather, the movement of the right thumb stick 1302B is emulated as the selection of the right move button 1302C. The user input 1520 is an example of the user input 420 (FIG. 13 ). The input emulator 1318 provides the user input 1520 to the basic block compiler 104, which operates in a manner illustrated above with reference to FIG. 13 .

It should be noted that the embodiment, described above with reference to FIG. 15 , is for movement of the right thumb stick 1302B in the right direction 1502. In one of embodiment, instead of the right thumb stick 1302B, the left thumb stick 1302A is moved in the right, left, forward, or backward direction and a user input is generated by the hand-held controller 414 based on the movement. In an embodiment, instead of movement in the right direction 1502, a movement in any other direction, such as the right, forward, backward, or a combination thereof occurs.

In an embodiment, instead of the hand-held controller 414, a wheel controller is used. The wheel controller has the shape of a driving wheel. As an example, the wheel controller excludes the left thumb stick 1302A and the right thumb stick 1302B. Instead, the driving wheel is operated by the user 1 to move a virtual object of the legacy game N in the left, right, forward, and backward directions. The driving wheel can be rotated in a clockwise direction or a counterclockwise direction. When the driving wheel is rotated in the clockwise direction by the user 1, the input processor 1314, determines based on one or more digital motion sensitive signals, that the driving wheel is rotated and whether the driving wheel is rotated in the clockwise on the counter clockwise direction. The input processor 1314 further determines whether an amount of the rotation exceeds a pre-set threshold. The input processor 1314 provides information, such as an identifier of the driving wheel, the direction of rotation, and an indication of whether the amount of rotation exceeds the pre-set threshold to the input emulator 1318. The input emulator 1318 accesses a mapping, such as a default mapping or a current mapping, to identify the corresponding button of the hand-held controller 1306 and operation of the corresponding button to generate a user input. For example, the input emulator 1318 identifies based on the information and the mapping that the corresponding button of the hand-held controller 1306 is selected and a number of times for which the corresponding button is selected to generate the user input. The input emulator 1318 provides the user input to the basic block compiler 104, which operates in a manner illustrated above with reference to FIG. 13 or 14B.

FIG. 16A is a diagram of an embodiment of a system 1600 to illustrate generation of a virtual image of a cross-hair when a touchpad 1602 is selected by the user 1. The touchpad 1602 is an example of a button. The system 1600 includes the input processor system 407, the hand-held controller 414, and the emulation processor system 409. The hand-held controller 414 includes the touchpad 1602, a directional pad 1604, a pad 1606, the left thumb stick 1302A, and the right thumb stick 1302B.

During a play of the legacy game N, the user 1 selects, using his/her finger, the touchpad 1602. The touchpad 1602 is an example of one of the updated input devices of the hand-held controller 414. The motion sensitive hardware of the hand-held controller 414 generates one or more analog motion sensitive signals in response to the selection of the touchpad 1602. For example, the one or more analog motion sensitive signals indicate a selection of the touchpad 1602 and a location of selection of the touchpad 1602 with respect to a reference co-ordinate system of the touchpad 1602. To illustrate, based on the location of the selection along an x-axis, a first potentiometer of the hand-held controller 414 generates a first electrical signal and based on the location of the selection along a y-axis, a second potentiometer of the hand-held controller 414 generates a second electrical signal. The x and y axes associated with the touchpad 1602 are further described below. The one or more analog motion sensitive signals are converted by the analog-to-digital converter of the hand-held controller 414 into one or more digital motion sensitive signals. The processor of the hand-held controller 414 applies the encoding protocol to the one or more digital motion sensitive signals to output one or more encoded signals. For example, the one or more encoded signals have a frequency that corresponds to, such as has a unique relationship with, the touchpad 1602. The communication device of the hand-held controller 414 applies the wireless transfer protocol to embed the one or more encoded signals into one or more data packets, and sends the one or more data packets via the wireless connection to the communication device 1320. The one or more data packets are illustrated in FIG. 16A as a user input 1612. The communication device 1320 applies the wireless transfer protocol to the one or more data packets received from the hand-held controller 414 to obtain the encoded signal and sends the encoded signal to the input processor 1314.

The input processor 1314 determines or identifies, in a manner similar to that illustrated about with reference to FIG. 13 , that the touchpad 1602 is selected by the user 1. For example, in response to determining that the one or more digital motion sensitive signals encoded within the one or more encoded signals are received at a frequency from the hand-held controller 414 that matches a pre-determined frequency channel, the input processor 1314 determines that the touchpad 1602 is selected. In the example, the pre-determined frequency channel is stored within the memory device 1316. Also, in the example, the input processor 1314 determines the frequency by applying a Fourier transform to the encoded signals.

The input processor 1314 further determines the location of selection on the touchpad 1602 by the user 1 with respect to the reference co-ordinate system of the touchpad 1602. For example, the input processor 1314 determines based on an amount of voltage received from the first potentiometer of the hand-held controller 414 that the touchpad 1602 is selected by the user 1 at a co-ordinate (x1, 0) with respect to the reference co-ordinate system of the touchpad 1602. Moreover, in the example, the input processor 1314 determines based on an amount of voltage received from the second potentiometer of the hand-held controller 414 that the touchpad 1602 is selected by the user 1 at a co-ordinate (0, y1) with respect to the reference co-ordinate system of the touchpad 1602. In the example, the first and second amounts of voltages are received within the one or more encoded signals. To illustrate, the one or more analog motion sensitive signals that are output from the motion sensitive hardware of the handheld controller 414 include information representing the first and second amounts of voltages. An identifier of the touchpad 1602 that is selected and the location of selection on the touchpad 1602 by the user 1 are examples of input device information, such as the initial input device information and the additional input device information.

The input processor 1318 provides the identifier of the touchpad 1602 that is selected and the location of selection on the touchpad 1602 to the input emulator 1318. The input emulator 1318 accesses a mapping 1610 to identify, based on the identifier of the touchpad 1602 that is selected, a corresponding button on the hand-held controller 1306. For example, the input emulator 1318 determines, from the mapping 1610, that the Select button on the hand-held controller 1306 has a unique relationship with the touchpad 1602. The mapping 1610 is an example of the default mapping 1308 (FIG. 13 ) or of the current mapping 1404 (FIG. 14A-2 ).

Also, the input emulator 1318 sends a request to the block dispatcher 302 to obtain a size of an image frame having a virtual scene of the legacy game N. As an example, the image frame of the legacy game N for which the size is requested is to be generated after a user input 1614 is generated based on the user input 1612. To illustrate, a first image frame of the legacy game N for which the size is requested is to be generated based on the user input 1614 and no other image frame is to be generated, based on the user input 1614, before the first image frame is generated. The block dispatcher 302 provides the size of the image frame to the input emulator 1318. For example, the block dispatcher 302 provides the size of the image frame to be the same as a preceding image frame that is generated immediately before the image frame to be generated based on the user input 1614. To illustrate, there is no other image frame to be generated by the block dispatcher 302 between the generation of the image frame to be generated based on the user input 1614 and the preceding image frame. The input emulator 1318 is coupled to the block dispatcher 302.

The input emulator 1318 determines a location of the virtual image of the cross-hair within the image frame to be generated based on the user input 1614. The location of the virtual image of the cross-hair within the image frame corresponds to the location of the selection on the touchpad 1602. An illustration of a manner in which the location of the virtual image of the cross-hair within the image frame has a one-to-one relationship to the location of the selection on the touchpad 1602 is described with reference to FIG. 16B.

The input emulator 1318 generates the user input 1614 having the indication of the Select button on the hand-held controller 1306 and the location of the virtual image of the cross-hair within the image frame to be generated based on the user input 1614. The user input 1614 is provided from the input emulator 1318 to the block compiler 104.

Upon receiving the user input 1614, the block compiler 104 determines whether one or more of the basic blocks 1 through n for servicing the user input 1614 are stored in the cache 102 (FIG. 1 ). In response to determining that one or more of the basic blocks 1 through n are stored in the cache 102, the block dispatcher 302 (FIG. 3 ) executes the one or more basic blocks 1 through n to generate one or more image frames for servicing the user input 1614. For example, the block dispatcher 302 (FIG. 3 ) receives the location of the virtual image of the cross-hair within the image frame to be generated from the block compiler 104, and executes the one or more basic blocks 1 through n to generate the cross-hair as a virtual object within the image frame. In addition, the cross-hair is generated within the image frame at the location corresponding to the location of the selection of the touchpad 1602 by the user 1.

In one embodiment, the input emulator 1318 generates a command for the block dispatcher 302 to determine the location of the virtual image of the cross-hair within an image frame and sends the command to the block dispatcher 302. For example, the command indicates to the block dispatcher 302 that the image frame be generated by the block dispatcher 302 is to include the virtual image of the cross-hair at a location that is proportional to the location of the selection on the touchpad 1602 by the user 1. The command includes the location of the selection on the touchpad 1602 by the user 1. The input emulator 1318 is coupled to the block dispatcher 302. In the embodiment, the user input 1614 does not include the location of the virtual image of the cross-hair within the image frame. The block dispatcher 302 executes one or more of the basic blocks 1 through n to generate the image frame. In addition, the block dispatcher 302 determines the location of the virtual image of the crosshair within the image frame in the same manner, described herein, such as with reference to FIG. 16B, in which the input emulator 1318 determines the location of the virtual image of the crosshair within the image frame based on the location of the selection on the touchpad 1602 by the user 1.

FIG. 16B is a diagram of an embodiment of a system 1650 to illustrate a correspondence between the location of selection on the touchpad 1062 by the user 1 and a location of a cross-hair 1652 on an image frame 1654 having the virtual environment 452. The correspondence is determined by the input emulator 1318 (FIG. 16A). The image frame 1654 is displayed on a display screen of the display device 410 (FIG. 4B). The system 1650 includes the touchpad 1602 and the image frame 1654.

The touchpad 1602 has a top edge 1666A, a right edge 1666B, a bottom edge 1666C, and a left edge 1666D. The top edge 1666A is adjacent to and adjoining the right and left edges. Also, the bottom edge 1666C is adjacent to and adjoining the right and left edges. The bottom edge 1666C faces the top edge 1666A and the right edge 1666B faces the left edge 1666D.

A location of the selection on the touchpad 1602 is a co-ordinate (x1, y1). The touchpad 1602 is associated with the reference co-ordinate system having an origin (0, 0) at a corner of the touchpad 1602. The touchpad 1602 has four corners, such as four vertices of a rectangle. As an example, the touchpad 1602 is of a rectangular shape having the vertices. The x-axis of the reference co-ordinate system of the touchpad 1602 is along the bottom edge 1666C of the touchpad 1602 and the y-axis of the reference co-ordinate system is along the left edge 1666D of the touchpad 1602. The co-ordinate x1 is a distance along the x-axis from the origin (0, 0) and the co-ordinate y1 is a distance along the y-axis from the origin (0, 0). The x-axis of the reference co-ordinate system is perpendicular to the y-axis of the reference co-ordinate system.

Similarly, the image frame 1654 has a top edge 1668A, a right edge 1668B, a bottom edge 1668C, and a left edge 1668D. The top edge 1668A is adjacent to and adjoining the right and left edges. Also, the bottom edge 1668C is adjacent to and adjoining the right and left edges of the image frame 1654. The bottom edge 1668C faces the top edge 1668A and the right edge 1668B faces the left edge 1668D.

The location of the cross-hair 1652 is at a co-ordinate (X1, Y1). The image frame 1654 is associated with a reference co-ordinate system having an origin (0, 0) at a corner of the image frame 1654. The image frame 1654 has four corners, such as four vertices of a rectangle. As an example, the image frame 1654 is of a rectangular shape having the vertices. An X-axis of the reference co-ordinate system of the image frame 1654 is along the bottom edge 1668C and a Y-axis of the reference co-ordinate system of the image frame 1654 is along the left edge 1668D. The co-ordinate X1 is a distance along the X-axis from the origin (0, 0) at the corner of the image frame 1654 and the co-ordinate Y1 is a distance along the Y-axis from the origin (0, 0).

The input emulator 1318 determines that the distance along the X-axis of the reference co-ordinate system of the image frame 1654 is proportional to the distance along the x-axis of the reference co-ordinate system of the touchpad 1602. For example, the input emulator 1318 determines that a width of the image frame 1654 is P times a width of the touchpad 1602, where P is an integer greater than zero. The width of the image frame 1654 is measured along the X-axis of the reference co-ordinate system of the image frame 1654 and the width of the touchpad 1602 is measured along the x-axis of the reference co-ordinate system of the touchpad 1602. In the example, the input emulator 1318 determines that that a height of the image frame 1654 is Q times a height of the touchpad 1602, where Q is an integer greater than zero. The height of the image frame 1654 is measured along the Y-axis of the reference co-ordinate system of the image frame 1654 and the height of the touchpad 1602 is measured along the y-axis of the reference co-ordinate system of the touchpad 1602. In the example, the input emulator 1318 determines the distance along the X-axis to be P times the distance along the x-axis of the reference co-ordinate system of the touchpad 1602. Also, in the example, the input emulator 1318 determines the distance along the Y-axis to be Q times the distance along the x-axis of the reference co-ordinate system of the touchpad 1602.

FIG. 17 is a diagram of an embodiment of a system 1700 to illustrate the use of different mappings with use of different types of hand-held controllers. The system 1700 includes a wheel controller 1702, the hand-held controller 414, and the input processor system 407. The wheel controller 1702 has the shape of a driving wheel and includes updated input devices, such as, a steering wheel 1708, a directional pad 1706, square button, a triangle button, a circle button, and an X button.

It should be noted that the wheel controller 1702 is of a different type than the hand-held controller 414. For example, the hand-held controller 414 has a left handle 1704A and a right handle 1704B, and excludes a steering wheel. The handles 1704A and 1704B extend downward from a body of the hand-held controller 414. Comparatively, the wheel controller 1702 has the steering wheel 1708 but excludes left and right handles.

Moreover, a sub-type of a first hand-held controller is of a different sub-type than a sub-type of a second hand-held controller when both the first and second hand-held controllers are of the same type but are manufactured by different entities. For example, a wheel controller manufactured by Logitech™ Corporation is of a different sub-type than a wheel controller manufactured by Sony™ corporation. As another example, a hand-held controller manufactured by Sony™ corporation is of a different type than a hand-held controller manufactured by Microsoft™ corporation.

The wheel controller 1702 has the same or similar internal components as that of the hand-held controller 414. For example, the wheel controller 1702 includes motion sensitive hardware, an analog-to-digital converter, a processor, and a communication device. The internal components of the wheel controller 1702 are coupled to each other in the same manner in which the internal components of the hand-held controller 414 are coupled with each other.

When the user 1 couples an updated controller, such as the hand-held controller 414 or the wheel controller 1702, with the input processor system 407, the user 1 operates one or more updated input devices of the updated controller to provide the type and the sub-type of the updated controller. For example, the user 1 decouples the hand-held controller 414 from the input processor system 407 and instead couples the wheel controller 1702 to the input processor system 407. When the updated controller is operated by the user 1, the updated controller generates an identification signal having the type of the updated controller and sends the identification signal to the input processor system 407. Also, the updated controller generates an identification signal having the sub-type of the updated controller and sends the identification signal to the input processor system 407. The input processor 1314 receives the type and the sub-type of the updated controller and provides the type and the sub-type to the input emulator 1318.

Upon receiving the type and the sub-type of the updated controller, the input emulator 1318 selects a mapping 1710 or a mapping 1712 based on the type and the sub-type. For example, the input emulator 1318 selects the mapping 1710 when the type of the updated controller is the hand-held controller 414 and the sub-type of the updated controller is the hand-held controller 414 manufactured by Sony™ corporation. The input emulator selects the mapping 1712 when the type of the updated controller is the wheel controller 1702 and the sub-type of the updated controller is the wheel controller 1702 manufactured by Sony™ corporation. An example of the mapping 1710 is a default mapping for the user account 1 or a current mapping for the user account 1. An example of the mapping 1712 is a default mapping for the user account 1 or a current mapping for the user account 1.

During a play of the legacy game N, the input processor system 407 receives the user input 419 from the wheel controller 1702, which is coupled to the input processor system 407 after decoupling the hand-held controller 414. The user input 419 is generated in the same manner by the wheel controller 1702 in which the user input 419 is generated by the hand-held controller 414 except that the driving wheel 1708 is rotated instead of the thumb sticks 1302A and 1302B. For example, the user 1 operates one or more of the updated input devices of the wheel controller 1702. The motion sensitive hardware of the wheel controller 1702 generates one or more analog motion sensitive signals in response to the operation of the one or more updated input devices of the wheel controller 1702. The analog-to-digital converter of the wheel controller 1702 converts the one or more analog motion sensitive signals into one or more digital motion sensitive signals. The processor of the wheel controller 1702 applies the encoding protocol to encode the one or more digital sensitive signals to output one or more encoded signals. The communication device of the wheel controller 1702 applies the wireless transfer protocol to the one or more encoded signals to generate one or more data packets, and sends the one or more data packets to the communication device 1320.

The communication device 1320 applies the wireless transfer protocol to the one or more data packets to extract the one or more encoded signals and sends the one or more encoded signals to the input processor 1314. The input processor 1314 identifies, from the one or more encoded signals, which of the updated input devices of the wheel controller 1702 are operated by the user 1, and provides one or more identifiers of one or more of the updated input devices to the input emulator 1318. The input emulator 1318 accesses the mapping 1712 and applies the mapping 1712 to identify corresponding one or more legacy input devices of the hand-held controller 1306 (FIG. 13 ) to generate the user input 420.

FIG. 18 is a diagram of an embodiment of a system 1800 to illustrate a communication of a current mapping from the game console 402 to the game console 1202. The system 1800 includes the game console 402, the computer network 408, the server system 404, and the game console 1202.

The game console 1202 includes the input processor system 1207, which includes an input processor 1804, an input emulator 1806, a memory device 1808, and a communication device 1810. As an illustration, the input emulator 1806, when implemented within the game console 1202, enables a play of the legacy game N by using a hand-held controller 1212. An example of the communication device 1810 is a communication device that applies the close-range communication protocol.

The communication device 1810 is coupled to the input processor 1804. The input processor 1804 and the input emulator 1806 are coupled to the memory device 1808. The input processor system 1207 is coupled to the bus 1218.

The input processor 1314 of the game console 402 accesses, such as reads, the current mapping 1404 from the memory device 1316 and sends the current mapping 1404 to the NIC 1212. For example, within a pre-determined time period after the current mapping 1404 is generated, the input processor 1314 sends the current mapping 1404 to the NIC 1212. To illustrate, immediately after the currently mapping 1404 is created, the current mapping 1404 is stored in the memory device 1316 and simultaneously sent to the NIC 1212. The NIC 1212 applies the network communication protocol to the current mapping 1404 to generate one or more data packets, and sends the one or more data packets via the computer network 408 to the server system 404 for storage in the one or more memory devices of the server system 404.

The user 1 uses the hand-held controller 1212 to log into the user account 1 and access the legacy game N via the game console 1202. In addition, before or during a play of the legacy game N, the user 1 selects one or more updated input devices of the hand-held controller 1212 to generate an indication, such as a request, for accessing the current mapping 1404 from the server system 404. Upon receiving the selection of the one or more updated input devices of the hand-held controller 1212, the hand-held controller 1212 applies the wireless transfer protocol to generate one or more data packets and sends the one or more data packets to the communication device 1810. The communication device 1810 applies the wireless transfer protocol to obtain the indication that the current mapping 1404 is to be obtained for the user account 1, and stores the indication in the memory device 1808 of the game console 1202.

A CPU, such as the CPU 922 (FIG. 9B), of the game console 1202 accesses the indication for obtaining the current mapping 1404 from the memory device 1808 and sends the indication to the NIC 1210. The NIC 1210 applies the network communication protocol to the indication for obtaining the current mapping 1404 to generate one or more data packets, and sends the one or more data packets via the computer network 408 to the server system 404.

In response to receiving the indication for the current mapping 1404 from the game console 1202, the server system 404 accesses the current mapping 1404 from the one or more memory devices of the server system 404 and sends the current mapping 1404 via the computer network 408 to the game console 1202. For example, the processor of the server system 404 determines that the indication for obtaining the current mapping 1404 corresponds to the user account 1. To illustrate, the processor of the server system 404 determines that indication is received while the user 1 is logged into the user account 1 to determine that the indication corresponds to the user account 1. Continuing with the example, the processor of the server system 404 accesses the current mapping 1404 from the one or more memory devices of the server system 404 and sends the current mapping 1404 to the network interface controller of the server system 404. The network interface controller of the server system 404 applies the network communication protocol to the current mapping 1404 to generate one or more data packets and sends the one or more data packets via the computer network 408 to the game console 1202.

The NIC 1210 of the game console 1202 extracts the current mapping 1404 from the one or more data packets received from the server system 404, and stores the current mapping 404 in the memory device 1808. The user input 1452 is received from the hand-held controller 1212 by the input processor system 1207 in the same manner in which the user input 1452 is received from the hand-held controller 414 by the input processor system 407. When the user input 1452 is received, the input emulator 1806 accesses the current mapping 1404 from the memory device 1808 to determine the user input 1454. For example, the user input 1454 is determined by the input emulator 1806 from the user input 1452 in the same manner in which the user input 1454 is determined by the input emulator 1318 from the user input 1452. The input emulator 1806 sends the user input 1454 to the emulation processor system 1206 via the bus 1218.

Upon receiving the user input 1454, the basic block compiler of the emulation processor system 1206 checks the cache 1208 of the emulation processor system 1206 to determine whether the cache 1208 includes one or more of the basic blocks 1 through n of the game code GCN for servicing the user input 1454. Upon determining that the cache 1208 does not include the one or more of the basic blocks 1 through n for servicing the user input 1454, the basic block compiler of the emulation processor system 1206 accesses one or more of the emulated PU code instructions 1 through M from the one or more memory devices of the emulation processor system 1206 for servicing the user input 1454, and compiles the one or more of the emulated PU code instructions 1 through M to generate one or more of the basic blocks 1 through n for servicing the user input 1454. The basic block compiler of the emulation processor system 1206 sends the one or more of the basic blocks 1 through n to the block dispatcher of the emulation processor system 1206. Upon receiving the one or more basic blocks 1 through n, the block dispatcher of the emulation processor system 1206 executes the one or more basic blocks 1 through n to generate one or more image frames based on the user input 1454. On the other hand, upon determining that the cache 1208 includes the one or more of the basic blocks 1 through n for servicing the user input 1454, the basic block compiler of the emulation processor system 1206 sends an instruction to the block dispatcher of the emulation processor system 1206. In response to receiving the instruction, the block dispatcher of the emulation processor system 1206 executes the one or more of the basic blocks 1 through n for servicing the user input 1454.

FIG. 19A is a screen shot of an image 1900 to illustrate reception of a type and a sub-type of an updated hand-held controller, such as the hand-held controller 414 or the wheel controller 1702 (FIG. 17 ) or the hand-held controller 1212 (FIG. 18 ). The image 1900 includes the virtual environment 452 (FIG. 4B) of the legacy game N.

During or before a play of the legacy game N, the user 1 decouples a first updated hand-held controller from the input processor system 407 and couples a second updated hand-held controller to the input processor system 407. The user 1 then operates one or more updated input devices of the second updated hand-held controller to access a menu 1902, which includes a Settings option. A CPU, such as the CPU 922 (FIG. 9B), of the emulation processor system 409 instructs the GPU, such as the GPU 924 (FIG. 9B), of the emulation processor system 409 to display the menu 1902 on a display screen of the display device 410 (FIG. 4B). The user 1 further operates one or more updated input devices of the second updated hand-held controller to select the Settings option. When the Settings option is selected, the CPU of the emulation processor system 409 instructs the GPU of the emulation processor system 409 to display another menu on the display screen of the display device 410 (FIG. 4B). The other menu includes a Controls and Peripherals option. The user 1 then operates one or more updated input devices of the second updated hand-held controller to select the Controls and Peripherals option. When the Controls and Peripherals option is selected, the CPU of the emulation processor system 409 instructs the GPU of the emulation processor system 409 to display a menu 1912 (FIG. 19B) on the display screen of the display device 410.

FIG. 19B is a screen shot of an image 1910 to illustrate the menu 1912. The menu 1910 includes a Reassign Buttons option to reassign buttons, a Gun Hand-held Controller option to indicate to the input processor system 407 (FIG. 4B) that a gun-shaped controller is to be used as the second updated hand-held controller with the input processor system 407, and a Wheel Hand-held Controller option to indicate to the input processor system 407 (FIG. 4B) that a wheel controller is to be used as the second updated hand-held controller with the input processor system 407. The gun-shaped controller is an example of a type of the updated hand-held controller.

The user 1 operates one or more updated input devices of the second updated hand-held controller to select the Wheel Hand-held Controller option. When the Wheel Hand-held Controller option is selected, the CPU of the emulation processor system 409 instructs the GPU of the emulation processor system 409 to display a menu including a first sub-type controller option and a second sub-type controller option on the display screen of the display device 410. The first sub-type controller and the second sub-type controller are examples of sub-types of a wheel controller.

The user 1 operates one or more updated input devices of the second updated hand-held controller to select the second sub-type controller option. Upon receiving the selection of the second sub-type controller option, the CPU of the emulation processor system 409 instructs the GPU of the emulation processor system 409 to continue or begin a play of the legacy game N.

FIG. 20 is an embodiment of a screen shot of an image 2000 to illustrate a mapping 2002, such as a default mapping. The image 2000 includes the virtual environment 452 of the legacy game N. The mapping 2002 is an example of the default mapping 1308 (FIG. 13 ). During or before a play of the legacy game N, the CPU of the emulation processor system 409 instructs the GPU of the emulation processor 409 to display the mapping 2002 on the display screen of the display device 410.

The mapping 2022 includes a unique relationship, such as a correspondence or a one-to-one relationship, between input devices of the legacy hand-held controller and input devices of the updated hand-held controller. For example, a legacy input device 1, such as the triangle button, of the legacy hand-held controller maps to an updated input device 1, such as the triangle button, of the updated hand-held controller. As another example, a legacy input device 2, such as the touchpad 1602 (FIG. 16A) of the updated hand-held controller has a correspondence with an updated input device 2, such as the Select button of the legacy hand-held controller. As yet another example, a legacy input device 3 of the legacy hand-held controller has a one-to-one relationship with an updated input device 2 of the updated hand-held controller.

FIG. 21 is a flow diagram conceptually illustrating various operations which are performed for streaming a cloud video game to a client device, in accordance with implementations of the disclosure. Examples of the client device include a combination of a hand-held controller and a display device, a smart phone, a combination of a hand-held controller and a display device and a game console, a combination of a hand-held controller and a head-mounted display (HMD), a combination of a hand-held controller and a game console and a head-mounted display, a tablet, and a computer. A game server 2102 executes a game program, such as a video game or the game code GCN, and generates raw (uncompressed) video 2104 and audio 2106. The virtual environment 452 (FIG. 4A) and audio output during presentation of the virtual environment 452 are examples of the video 2104 and audio 2106. The game server 2102 is an example of the server system 404 (FIG. 4A). The video 2104 and audio 2106 are captured and encoded for streaming purposes, as indicated at reference 2108 in the illustrated diagram. The encoding provides for compression of the video and audio streams to reduce bandwidth usage and optimize the gaming experience. Examples of encoding formats include H.265/MPEG-H, H.264/MPEG-4, H.263/MPEG-4, H.262/MPEG-2, WMV, VP6/7/8/9, etc.

Encoded audio 2110 and encoded video 2112 are further packetized into network packets, as indicated at reference numeral 2114, for purposes of transmission over a computer network 2120, which is an example of the computer network 408 (FIG. 4A). In some embodiments, the network packet encoding process also employs a data encryption process, thereby providing enhanced data security. In the illustrated implementation, audio packets 2116 and video packets 2118 are generated for transport over the computer network 2120.

The game server 2102 additionally generates haptic feedback data 2122, which is also packetized into network packets for network transmission. In the illustrated implementation, haptic feedback packets 2124 are generated for transport over the computer network 2120.

The foregoing operations of generating the raw video and audio and the haptic feedback data are performed on the game server 2102 of a data center, and the operations of encoding the video and audio, and packetizing the encoded audio/video and haptic feedback data for transport are performed by the streaming engine of the data center. As indicated, the audio, video, and haptic feedback packets are transported over the computer network 2120. As indicated at reference 2126, the audio packets 2116, video packets 2118, and haptic feedback packets 2124, are disintegrated, e.g., parsed, etc., by the client device to extract encoded audio 2128, encoded video 2130, and haptic feedback data 2122 at the client device from the network packets. If data has been encrypted, then the data is also decrypted. The encoded audio 2128 and encoded video 2130 are then decoded by the client device, as indicated at reference 2134, to generate client-side raw audio and video data for rendering on a display device 2140 of the client device. The haptic feedback data 2122 is processed by a processor of the client device to produce a haptic feedback effect at a controller device 2142 or other interface device, e.g., the HMD, etc., through which haptic effects can be rendered. The controller device 2142 is an example of a hand-held controller, such as the hand-held controller 414 (FIG. 4A) or 1212 (FIG. 12 ), of the client device. One example of a haptic effect is a vibration or rumble of the controller device 2142.

It will be appreciated that a video game is responsive to player inputs, and thus, a similar procedural flow to that described above for transmission and processing of player input, but in the reverse direction from client device to server, is performed. As shown, the controller device 2142 or another updated controller, e.g., the head-mounted display, etc., or a combination thereof generates input data 2148. The input data 2148 is packetized at the client device for transport as a user input over the computer network 2120 to the data center. Input data packets 2146 are unpacked and reassembled by the game server 2102 to define the input data 2148 on the data center side. The input data 2148 is fed to the game server 2102, which processes the input data 2148 to generate a game state of the legacy game N.

During transport via the computer network 2120 of the audio packets 2116, the video packets 2118, and haptic feedback packets 2124, in some embodiments, the transmission of data over the computer network 2120 is monitored to ensure a quality of service. For example, network conditions of the computer network 2120 are monitored as indicated by reference 2150, including both upstream and downstream network bandwidth, and the game streaming is adjusted in response to changes in available bandwidth. That is, the encoding and decoding of network packets is controlled based on present network conditions, as indicated by reference 2152.

FIG. 22 is a block diagram of an embodiment of a game console 2200 that is compatible for interfacing with a display device of a client device and is capable of communicating via the computer network 2120 (FIG. 21 ) with a game hosting system, such as the server system 404 (FIG. 4A). The game console 2200 is an example of the game console 402 (FIG. 4A) and of the game console 1202 (FIG. 12 ). The game console 2200 is located within the data center or is located at a location at which a player, such as the user 1 or 2, is located. In some embodiments, the game console 2200 is used to execute the game code GCN to display the legacy game N on an HMD 2205. The game console 2200 is provided with various peripheral devices connectable to the game console 2200. The game console 2200 has a cell processor 2228, a dynamic random access memory (XDRAM) unit 2226, a Reality Synthesizer graphics processor unit 2230 with a dedicated video random access memory (VRAM) unit 2232, and an input/output (I/O) bridge 2234. The game console 2200 also has a Blu Ray® Disk read-only memory (BD-ROM) optical disk reader 2240 for reading from a disk 2240 a and a removable slot-in hard disk drive (HDD) 2236, accessible through the I/O bridge 2234. Optionally, the game console 2200 also includes a memory card reader 2238 for reading compact flash memory cards, memory Stick® memory cards and the like, which is similarly accessible through the I/O bridge 2234. The I/O bridge 2234 also connects to USB 2.0 ports 2224, a gigabit Ethernet port 2222, an IEEE 802.11b/g wireless network (Wi-Fi™) port 2220, and a Bluetooth® wireless link port 2218 capable of supporting Bluetooth connections.

In operation, the I/O bridge 2234 handles all wireless, USB and Ethernet data, including data from a game controller and from the HMD 2205. For example, when the player is playing the legacy game N generated by execution of a portion of a game code, such as the game code GCN, the I/O bridge 2234 receives input data or an input signal, described herein, from the game controller 2142 and/or from the HMD 2205 via a Bluetooth link and directs the input data to the cell processor 2228, which updates a current state of the legacy game N accordingly. As an example, a camera within the HMD 2205 captures a gesture of the player to generate an image representing the gesture.

The wireless, USB and Ethernet ports also provide connectivity for the game controllers 2142 and 2203, the HMD 2205, and other peripheral devices, such as, for example, a remote control 2204, a keyboard 2206, a mouse 2208, a portable entertainment device 2210, such as, e.g., a Sony Playstation Portable® entertainment device, etc., a video camera, such as, e.g., an EyeToy® video camera 2212, etc., a microphone headset 2214, and a microphone 2215. The portable entertainment device 2210 is an example of a game controller. In some embodiments, such peripheral devices are connected to the game console 2200 wirelessly, for example, the portable entertainment device 2210 communicates via a Wi-Fi™ ad-hoc connection, whilst the microphone headset 2214 communicates via a Bluetooth link.

The provision of these interfaces means that the game console 2200 is also potentially compatible with other peripheral devices such as digital video recorders (DVRs), set-top boxes, digital cameras, portable media players, Voice over Internet protocol (IP) telephones, mobile telephones, printers and scanners.

In addition, a legacy memory card reader 2216 is connected to the game console 2200 via the USB port 2224, enabling the reading of memory cards 2248 of a kind used by the game console 2200. The game controllers 2142 and 2203, and the HMD 2205 are operable to communicate wirelessly with the game console 2200 via the Bluetooth link 2218, or to be connected to the USB port 2224, thereby also receiving power by which to charge batteries of the game controller 2142 and 2203 and the HMD 2205. In some embodiments, each of the game controllers 2142 and 2203, and the HMD 2205 includes a memory, a processor, a memory card reader, permanent memory, such as, e.g., flash memory, etc., light emitters such as, e.g., an illuminated spherical section, light emitting diodes (LEDs), or infrared lights, etc., microphone and speaker for ultrasound communications, an acoustic chamber, a digital camera, an internal clock, a recognizable shape, such as, e.g., a spherical section facing the game console 2200, and wireless devices using protocols, such as, e.g., Bluetooth, Wi-Fi, etc.

The game controller 2142 is a controller designed to be used with two hands by a player, such as the player 1 or 2 or 3 or 4, and the game controller 2203 is a single-hand controller with an attachment. The HMD 2205 is designed to fit on top of a head and/or in front of eyes of the player. In addition to one or more analog joysticks and conventional control buttons, each game controller 2142 and 2203 is susceptible to three-dimensional location determination. Similarly, the HMD 2205 is susceptible to three-dimensional location determination. Consequently, in some embodiments, gestures and movements by the player that uses the game controller 2142 and 2203 and of the HMD 2205 are translated as inputs to a game in addition to or instead of conventional button or joystick commands. Optionally, other wirelessly enabled peripheral devices, such as, e.g., the Playstation™ Portable device, etc., are used as a controller. In the case of the Playstation™ Portable device, additional game or control information, e.g., control instructions or number of lives, etc., is provided on a display screen of the device. In some embodiments, other alternative or supplementary control devices are used, such as, e.g., a dance mat (not shown), a light gun (not shown), a steering wheel and pedals (not shown), bespoke controllers, etc. Examples of bespoke controllers include a single or several large buttons for a rapid-response quiz game (also not shown).

The remote control 2204 is also operable to communicate wirelessly with the game console 2200 via the Bluetooth link 2218. The remote control 2204 includes controls suitable for the operation of the Blu Ray™ Disk BD-ROM reader 2240 and for navigation of disk content.

The Blu Ray™ Disk BD-ROM reader 2240 is operable to read CD-ROMs compatible with the game console 2200, in addition to conventional pre-recorded and recordable CDs, and so-called Super Audio CDs. The Blu Ray™ Disk BD-ROM reader 2240 is also operable to read digital video disk-ROMs (DVD-ROMs) compatible with the game console 2200, in addition to conventional pre-recorded and recordable DVDs. The Blu Ray™ Disk BD-ROM reader 2240 is further operable to read BD-ROMs compatible with the game console 2200, as well as conventional pre-recorded and recordable Blu-Ray Disks.

The game console 2200 is operable to supply audio and video, either generated or decoded via the Reality Synthesizer graphics unit 2230, through audio connectors 2250 and video connectors 2252 to a display and sound output device 2242, such as, e.g., a monitor or television set, etc., having a display screen 2244 and one or more loudspeakers 2246, or to supply the audio and video via the Bluetooth® wireless link port 2218 to the display device of the HMD 2205. The audio connectors 2250, in various embodiments, include conventional analogue and digital outputs whilst the video connectors 2252 variously include component video, S-video, composite video, and one or more High Definition Multimedia Interface (HDMI) outputs. Consequently, video output may be in formats such as phase alternating line (PAL) or National Television System Committee (NTSC), or in 2220p, 1080i or 1080p high definition. Audio processing, e.g., generation, decoding, etc., is performed by the cell processor 2208. An operating system of the game console 2200 supports Dolby® 5.1 surround sound, Dolby® Theatre Surround (DTS), and the decoding of 7.1 surround sound from Blu-Ray® disks. The display and sound output device 2242 is an example of the display device 410 (FIG. 4A).

In some embodiments, a video camera, e.g., the video camera 2212, etc., comprises a single charge coupled device (CCD), an LED indicator, and hardware-based real-time data compression and encoding apparatus so that compressed video data is transmitted in an appropriate format such as an intra-image based motion picture expert group (MPEG) standard for decoding by the game console 2200. An LED indicator of the video camera 2212 is arranged to illuminate in response to appropriate control data from the game console 2200, for example, to signify adverse lighting conditions, etc. Some embodiments of the video camera 2212 connect to the game console 2200 via a USB, Bluetooth or Wi-Fi communication port. Various embodiments of a video camera include one or more associated microphones and also are capable of transmitting audio data. In several embodiments of a video camera, the CCD has a resolution suitable for high-definition video capture. In use, images captured by the video camera are incorporated within a game or interpreted as game control inputs. In another embodiment, a video camera is an infrared camera suitable for detecting infrared light.

In various embodiments, for successful data communication to occur with a peripheral device, such as, for example, a video camera or remote control via one of the communication ports of the game console 2200, an appropriate piece of software, such as, a device driver, etc., is provided.

In some embodiments, the aforementioned system devices, including the game console 2200, the game controller 2142 (FIG. 21 ) or 2203, and the HMD 2205 enable the HMD 2205 to display and capture video of an interactive session of the legacy game N. The system devices initiate an interactive session of the of the legacy game N, the interactive session defining interactivity between the player 1 and other players and the of the legacy game N. The system devices further determine an initial position and orientation of the game controller 2142 (FIG. 21 ) or 2103, and/or the HMD 2205 operated by a player. The game console 2200 determines a current state of a game based on the interactivity between a player, and the legacy game N. The system devices track a position and orientation of the game controller 2142 or 2203 and/or the HMD 2205 during an interactive session of the player with the legacy game N. The system devices generate a spectator video stream of the interactive session based on a current state of the legacy game N and the tracked position and orientation of the game controller 2142 or 2203 and/or the HMD 2205. In some embodiments, the HHC renders the spectator video stream on a display screen of the HHC. In various embodiments, the HMD 2205 renders the spectator video stream on a display screen of the HMD 2205.

With reference to FIG. 23 , a diagram illustrating components of an HMD 2302 is shown. The HMD 2302 is an example of the HMD 2205 (FIG. 22 ). The HMD 2302 includes a processor 2300 for executing program instructions. A memory device 2302 is provided for storage purposes. Examples of the memory device 2302 include a volatile memory, a non-volatile memory, or a combination thereof. A display device 2304 is included which provides a visual interface, e.g., display of image frames generated from save data, etc., that the player views. A battery 2306 is provided as a power source for the HMD 2302. A motion detection module 2308 includes any of various kinds of motion sensitive hardware, such as a magnetometer 2310, an accelerometer 2312, and a gyroscope 2314.

An accelerometer is a device for measuring acceleration and gravity induced reaction forces. Single and multiple axis models are available to detect magnitude and direction of the acceleration in different directions. The accelerometer is used to sense inclination, vibration, and shock. In one embodiment, three accelerometers 2312 are used to provide the direction of gravity, which gives an absolute reference for two angles, e.g., world-space pitch and world-space roll, etc.

A magnetometer measures a strength and a direction of a magnetic field in a vicinity of the HMD 2302. In some embodiments, three magnetometers 2310 are used within the HMD 2302, ensuring an absolute reference for the world-space yaw angle. In various embodiments, the magnetometer is designed to span the earth magnetic field, which is ±80 microtesla. Magnetometers are affected by metal, and provide a yaw measurement that is monotonic with actual yaw. In some embodiments, a magnetic field is warped due to metal in the real-world environment, which causes a warp in the yaw measurement. In various embodiments, this warp is calibrated using information from other sensors, e.g., the gyroscope 2314, a camera 2316, etc. In one embodiment, the accelerometer 2312 is used together with magnetometer 2310 to obtain the inclination and azimuth of the HMD 2302.

A gyroscope is a device for measuring or maintaining orientation, based on the principles of angular momentum. In one embodiment, instead of the gyroscope 2314, three gyroscopes provide information about movement across the respective axis (x, y and z) based on inertial sensing. The gyroscopes help in detecting fast rotations. However, the gyroscopes, in some embodiments, drift overtime without the existence of an absolute reference. This triggers resetting the gyroscopes periodically, which can be done using other available information, such as positional/orientation determination based on visual tracking of an object, accelerometer, magnetometer, etc.

The camera 2316 is provided for capturing images and image streams of the real-world environment, e.g., room, cabin, natural environment, etc., surrounding the player. In various embodiments, more than one camera is included in the HMD 2302, including a camera that is rear-facing, e.g., directed away from the player, when the player is viewing the display of the HMD 2302, etc., and a camera that is front-facing, e.g., directed towards the player when the player is viewing the display of the HMD 2302, etc. Additionally, in several embodiments, a depth camera 2318 is included in the HMD 2302 for sensing depth information of objects in the real-world environment.

The HMD 2302 includes speakers 2320 for providing audio output. Also, a microphone 2322 is included, in some embodiments, for capturing audio from the real-world environment, including sounds from an ambient environment, and speech made by the player, etc. The HMD 2302 includes a tactile feedback module 2324, e.g., a vibration device, etc., for providing tactile feedback to the player. In one embodiment, the tactile feedback module 2324 is capable of causing movement and/or vibration of the HMD 2302 to provide tactile feedback to the player.

LEDs 2326 are provided as visual indicators of statuses of the HMD 2302. For example, an LED may indicate battery level, power on, etc. A card reader 2328 is provided to enable the HMD 2302 to read and write information to and from a memory card. A USB interface 2330 is included as one example of an interface for enabling connection of peripheral devices, or connection to other devices, such as other portable devices, computers, etc. In various embodiments of the HMD 2302, any of various kinds of interfaces may be included to enable greater connectivity of the HMD 2302.

A Wi-Fi™ module 2332 is included for enabling connection to the Internet via wireless networking technologies. Also, the HMD 2302 includes a Bluetooth™ module 2334 for enabling wireless connection to other devices. A communications link 2336 is also included, in some embodiments, for connection to other devices. In one embodiment, the communications link 2336 utilizes infrared transmission for wireless communication. In other embodiments, the communications link 2336 utilizes any of various wireless or wired transmission protocols for communication with other devices.

Input buttons/sensors 2338 are included to provide an input interface for the player. Any of various kinds of input interfaces are included, such as buttons, touchpad, joystick, trackball, etc. An ultra-sonic communication module 2340 is included, in various embodiments, in the HMD 2302 for facilitating communication with other devices via ultra-sonic technologies.

Bio-sensors 2342 are included to enable detection of physiological data from the player. In one embodiment, the bio-sensors 2342 include one or more dry electrodes for detecting bio-electric signals of the player, through the player's skin.

The foregoing components of HMD 2302 have been described as merely exemplary components that may be included in HMD 2302. In various embodiments, the HMD 2302 includes or does not include some of the various aforementioned components.

FIG. 24 illustrates an embodiment of an Information Service Provider (INSP) architecture. INSPs 2402 delivers a multitude of information services to the player geographically dispersed and connected via a computer network 2406, e.g., a LAN, a WAN, or a combination thereof, etc. The computer network 2406 is an example of the computer network 2120 (FIG. 21 ). An example of the WAN includes the Internet and an example of the LAN includes an Intranet. The user 1 operates a client device 2420-1, the user 2 operates another client device 2420-2, and a user 3 operates yet another client device 2420-3.

In some embodiments, each client device 2420-1, 2420-2, and 2420-3 includes a central processing unit (CPU), a display, and an input/output (I/O) interface. Examples of each client device 2420-1, 2420-2, and 2420-3 include a personal computer (PC), a mobile phone, a netbook, a tablet, a gaming system, a personal digital assistant (PDA), the game console 2200 and a display device, the HMD 2302 (FIG. 23 ), the game console 2200 and the HMD 2302, a desktop computer, a laptop computer, and a smart television, etc. Other examples of each of the client devices 2420-1, 2420-2, and 2420-3 are provided above. In some embodiments, the INSP 2402 recognizes a type of a client device and adjusts a communication method employed.

In some embodiments, the INSP 2402 delivers one type of service, such as stock price updates, or a variety of services such as broadcast media, news, sports, gaming, etc. Additionally, the services offered by each INSP are dynamic, that is, services can be added or taken away at any point in time. Thus, an INSP providing a particular type of service to a particular individual can change over time. For example, the client device 2420-1 is served by an INSP in near proximity to the client device 2420-1 while the client device 2420-1 is in a home town of the user 1, and client device 2420-1 is served by a different INSP when the user 1 travels to a different city. The home-town INSP will transfer requested information and data to the new INSP, such that the information “follows” the client device 2420-1 to the new city making the data closer to the client device 2420-1 and easier to access. In various embodiments, a master-server relationship is established between a master INSP, which manages the information for the client device 2420-1, and a server INSP that interfaces directly with the client device 2420-1 under control from the master INSP. In some embodiments, data is transferred from one ISP to another ISP as the client device 2420-1 moves around the world to make the INSP in better position to service client device 2420-1 be the one that delivers these services.

The INSP 2402 includes an Application Service Provider (ASP) 2408, which provides computer-based services to customers over the computer network 2406. Software offered using an ASP model is also sometimes called on-demand software or software as a service (SaaS). A simple form of providing access to a computer-based service, e.g., customer relationship management, etc., is by using a standard protocol, e.g., a hypertext transfer protocol (HTTP), etc. The application software resides on a vendor's server and is accessed by each client device 2420-1, 2420-2, and 2420-3 through a web browser using a hypertext markup language (HTML), etc., by a special purpose client software provided by the vendor, and/or other remote interface, e.g., a thin client, etc.

Services delivered over a wide geographical area often use cloud computing. Cloud computing is a style of computing in which dynamically scalable and often virtualized resources are provided as a service over the computer network 2406. The users 1 through 3 do not need to be an expert in the technology infrastructure in the “cloud” that supports them. Cloud computing is divided, in some embodiments, in different services, such as Infrastructure as a Service (IaaS), Platform as a Service (PaaS), and Software as a Service (SaaS). Cloud computing services often provide common business applications online that are accessed from a web browser, while the software and data are stored on the servers. The term cloud is used as a metaphor for the computer network 2406, e.g., using servers, storage and logic, etc., based on how the computer network 2406 is depicted in computer network diagrams and is an abstraction for the complex infrastructure it conceals.

Further, the INSP 2402 includes a game processing provider (GPP) 2410, also sometime referred to herein as a game processing server, which is used by the client devices 2420-1, 2420-2, and 2420-3 to play single and multiplayer video games, such as the legacy game N. Most video games played over the computer network 2406 operate via a connection to a game server. Typically, games use a dedicated server application that collects data from the client devices 2420-1, 2420-2, and 2420-3 and distributes it to other clients that are operated by other users. This is more efficient and effective than a peer-to-peer arrangement, but a separate server is used to host the server application. In some embodiments, the GPP 2410 establishes communication between the client devices 2420-1, 2420-2, and 2420-3, which exchange information without further relying on the centralized GPP 2410.

Dedicated GPPs are servers which run independently of a client. Such servers are usually run on dedicated hardware located in data centers, providing more bandwidth and dedicated processing power. Dedicated servers are a method of hosting game servers for most PC-based multiplayer games. Massively multiplayer online games run on dedicated servers usually hosted by the software company that owns the game title, allowing them to control and update content.

A broadcast processing server (BPS) 2412, sometimes referred to herein as a broadcast processing provider, distributes audio or video signals to an audience. Broadcasting to a very narrow range of audience is sometimes called narrowcasting. A final leg of broadcast distribution is how a signal gets to the client devices 2420-1, 2420-2, and 2420-3, and the signal, in some embodiments, is distributed over the air as with a radio station or a television station to an antenna and receiver, or through a cable television or cable radio or “wireless cable” via the station. The computer network 2406 also brings, in various embodiments, either radio or television signals to the client devices 2420-1, 2420-2, and 2420-3, especially with multicasting allowing the signals and bandwidth to be shared. Historically, broadcasts are delimited, in several embodiments, by a geographic region, e.g., national broadcasts, regional broadcasts, etc. However, with the proliferation of high-speed Internet, broadcasts are not defined by geographies as content can reach almost any country in the world.

A storage service provider (SSP) 2414 provides computer storage space and related management services. The SSP 2414 also offers periodic backup and archiving. By offering storage as a service, the client devices 2420-1, 2420-2, and 2420-3 use more storage compared to when storage is not used as a service. Another major advantage is that the SSP 2414 includes backup services and the client devices 2420-1, 2420-2, and 2420-3 will not lose data if their hard drives fail. Further, a plurality of SSPs, in some embodiments, have total or partial copies of the data received from the client devices 2420-1, 2420-2, and 2420-3, allowing the client devices 2420-1, 2420-2, and 2420-3 to access data in an efficient way independently of where the client devices 2420-1, 2420-2, and 2420-3 are located or of types of the clients. For example, the player accesses personal files via a home computer, as well as via a mobile phone while the player is on the move.

A communications provider 2416 provides connectivity to the client devices 2420-1, 2420-2, and 2420-3. One kind of the communications provider 2416 is an Internet service provider (ISP), which offers access to the computer network 2406. The ISP connects the client devices 2420-1, 2420-2, and 2420-3 using a data transmission technology appropriate for delivering Internet Protocol datagrams, such as dial-up, digital subscriber line (DSL), cable modem, fiber, wireless or dedicated high-speed interconnects. The communications provider 2416 also provides, in some embodiments, messaging services, such as e-mail, instant messaging, and short message service (SMS) texting. Another type of a communications Provider is a network service provider (NSP), which sells bandwidth or network access by providing direct backbone access to the computer network 2406. Examples of network service providers include telecommunications companies, data carriers, wireless communications providers, Internet service providers, cable television operators offering high-speed Internet access, etc.

A data exchange 2418 interconnects the several modules inside INSP 602 and connects these modules to the client devices 2420-1, 2420-2, and 2420-3 via the computer network 2406. The data exchange 2418 covers, in various embodiments, a small area where all the modules of INSP 2402 are in close proximity, or covers a large geographic area when the different modules are geographically dispersed. For example, the data exchange 2402 includes a fast Gigabit Ethernet within a cabinet of a data center, or an intercontinental virtual LAN.

In some embodiments, communication between the server system 404 (FIG. 4A) and the client devices 2420-1 through 2420-3 may be facilitated using wireless technologies. Such technologies may include, for example, 5G wireless communication technologies.

In one embodiment, a video game, such as the legacy game N, as described herein, is executed either locally on a gaming machine, a personal computer, or on a server. In some cases, the video game is executed by one or more servers of a data center. When the video game is executed, some instances of the video game may be a simulation of the video game. For example, the video game may be executed by an environment or server that generates a simulation of the video game. The simulation, on some embodiments, is an instance of the video game. In other embodiments, the simulation maybe produced by an emulator. In either case, if the video game is represented as a simulation, that simulation is capable of being executed to render interactive content that can be interactively streamed, executed, and/or controlled by user input.

It should be noted that in various embodiments, one or more features of some embodiments described herein are combined with one or more features of one or more of remaining embodiments described herein.

Embodiments described in the present disclosure may be practiced with various computer system configurations including hand-held devices, microprocessor systems, microprocessor-based or programmable consumer electronics, minicomputers, mainframe computers and the like. In one implementation, the embodiments described in the present disclosure are practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a wire-based or wireless network.

With the above embodiments in mind, it should be understood that, in one implementation, the embodiments described in the present disclosure employ various computer-implemented operations involving data stored in computer systems. These operations are those requiring physical manipulation of physical quantities. Any of the operations described herein that form part of the embodiments described in the present disclosure are useful machine operations. Some embodiments described in the present disclosure also relate to a device or an apparatus for performing these operations. The apparatus is specially constructed for the required purpose, or the apparatus is a general-purpose computer selectively activated or configured by a computer program stored in the computer. In particular, in one embodiment, various general-purpose machines are used with computer programs written in accordance with the teachings herein, or it may be more convenient to construct a more specialized apparatus to perform the required operations.

In an implementation, some embodiments described in the present disclosure are embodied as computer-readable code on a computer-readable medium. The computer-readable medium is any data storage device that stores data, which is thereafter read by a computer system. Examples of the computer-readable medium include a hard drive, a network-attached storage (NAS), a ROM, a RAM, a CD-ROM, a CD-recordable (CD-R), a CD-rewritable (CD-RW), a magnetic tape, an optical data storage device, a non-optical data storage device, etc. As an example, a computer-readable medium includes computer-readable tangible medium distributed over a network-coupled computer system so that the computer-readable code is stored and executed in a distributed fashion.

Moreover, although some of the above-described embodiments are described with respect to a gaming environment, in some embodiments, instead of a game, other environments, e.g., a video conferencing environment, etc., is used.

Although the method operations were described in a specific order, it should be understood that other housekeeping operations may be performed in between operations, or operations may be adjusted so that they occur at slightly different times, or may be distributed in a system which allows the occurrence of the processing operations at various intervals associated with the processing, as long as the processing of the overlay operations are performed in the desired way.

Although the foregoing embodiments described in the present disclosure have been described in some detail for purposes of clarity of understanding, it will be apparent that certain changes and modifications can be practiced within the scope of the appended claims. Accordingly, the present embodiments are to be considered as illustrative and not restrictive, and the embodiments are not to be limited to the details given herein, but may be modified within the scope and equivalents of the appended claims. 

1. A method for using an updated hand-held controller to play a legacy game, comprising: receiving a user input from the updated hand-held controller during a play of the legacy game; parsing the user input to identify an updated input device of the updated hand-held controller; determining a functionality of the updated input device; determining, based on the identity of the updated input device, an identity of a legacy input device of a legacy hand-held controller; identifying a functionality of the legacy input device corresponding to the functionality of the updated input device; determining whether one or more blocks of code for servicing the functionality of the legacy input device of the legacy hand-held controller are cached; accessing one or more instructions of a legacy game code of the legacy game upon determining that the one or more blocks of code are not cached; and compiling the one or more blocks of code from the one or more instructions of the legacy game code.
 2. The method of claim 1, further comprising executing the one or more blocks of code to modify a virtual environment of the legacy game in response to determining that the one or more blocks of code are cached.
 3. The method of claim 1, wherein the identity of the legacy input device is a portion of a default mapping between identities of a plurality of legacy input devices of the legacy hand-held controller and identities of a plurality of updated input devices of the updated hand-held controller, wherein the legacy input device is one of the plurality of legacy input devices.
 4. The method of claim 1, wherein the functionality of the legacy input device is a portion of a default mapping between functionalities of a plurality of legacy input devices of the legacy hand-held controller and functionalities of a plurality of updated input devices of the updated hand-held controller, wherein the legacy input device is one of the plurality of legacy input devices, the method further comprising: determining whether a user input for modifying the default mapping to a current mapping is received from the updated hand-held controller, wherein the default mapping is associated with a user account; associating the current mapping with the user account; receiving an additional user input from the updated hand-held controller during the play of the legacy game; parsing the additional user input to identify an additional updated input device of the updated hand-held controller; determining an additional functionality of the additional updated input device; determining, based on the identity of the additional updated input device, an identity of an additional legacy input device of the legacy hand-held controller; identifying an additional functionality of the additional legacy input device corresponding to the additional functionality of the updated input device; determining whether one or more blocks of code for servicing the additional functionality of the additional legacy input device are cached; accessing one or more instructions of the legacy game code of the legacy game upon determining that the one or more blocks of code for servicing the additional functionality are not cached; and compiling the one or more blocks of code for servicing the additional functionality from the one or more instructions of the legacy game code upon determining that the one or more blocks of code for servicing the additional functionality are not cached.
 5. The method of claim 4, further comprising: transferring the current mapping from a first computing device via a computer network to a server system, wherein the server system is configured to receive a request from a second computing device for the current mapping, wherein the server system is configured to send the current mapping via the computer network to the second computing device in response to the reception of the request.
 6. The method of claim 1, wherein said determining the functionality of the updated input device comprises: determining whether a direction of movement of the updated input device based on the user input matches a pre-determined direction; determining whether the movement of the updated input device exceeds a pre-determined threshold upon determining that the direction of movement of the updated input device matches the pre-determined direction, wherein the functionality of the updated input device is determined to be the movement of the updated input device exceeding the pre-determined threshold in the pre-determined direction.
 7. The method of claim 6, wherein said determining the functionality of the legacy input device comprises determining that the functionality of the legacy input device achieves the same result as that achieved by the functionality of the updated input device.
 8. The method of claim 1, wherein the updated input device is a touchpad, wherein said parsing the user input includes determining whether a selection of the touchpad is received, wherein said determining the functionality of the updated input device includes identifying a location of the selection on the touchpad; and accessing a mapping, wherein said identifying the legacy input device includes identifying a button on the legacy hand-held controller based on the mapping, the method further comprising: executing the one or more blocks of code to generate a virtual object based on a functionality of the button, wherein the virtual object is generated at a location within an image, wherein the location of the virtual object within the image corresponds to the location of the selection on the touchpad.
 9. The method of claim 8, wherein the virtual object is a cross-hair.
 10. The method of claim 1, wherein the updated input device is one of a plurality of updated input devices of the updated hand-held controller, wherein the legacy input device is one of a plurality of legacy input devices of the legacy hand-held controller, the method further comprising: receiving a type of the updated hand-held controller; receiving a sub-type of the updated hand-held controller; identifying, from the type and the sub-type of the updated hand-held controller, a default mapping between the plurality of updated input devices and the plurality of legacy input devices of the legacy hand-held controller, wherein the legacy input device is identified based on the default mapping.
 11. A system for using an updated hand-held controller to play a legacy game, comprising: one or more processors configured to: receive a user input from the updated hand-held controller during a play of the legacy game; parse the user input to identify an updated input device of the updated hand-held controller; determine a functionality of the updated input device; determine, based on the identity of the updated input device, an identity of a legacy input device of a legacy hand-held controller; identify a functionality of the legacy input device corresponding to the functionality of the updated input device; determine whether one or more blocks of code for servicing the functionality of the legacy input device of the legacy hand-held controller are cached; access one or more instructions of a legacy game code of the legacy game in response to the determination that the one or more blocks of code are not cached; and compile the one or more blocks of code from the one or more instructions of the legacy game code; and a memory device coupled to the one or more processors.
 12. The system of claim 11, further comprising a cache coupled to the one or more processors, wherein the cache is coupled to store the one or more blocks of code, wherein the one or more processors are configured to execute the one or more blocks of code to modify a virtual environment of the legacy game.
 13. The system of claim 11, wherein the identity of the legacy input device is a portion of a default mapping between identities of a plurality of legacy input devices of the legacy hand-held controller and identities of a plurality of updated input devices of the updated hand-held controller, wherein the legacy input device is one of the plurality of legacy input devices
 14. The system of claim 11, wherein the functionality of the legacy input device is a portion of a default mapping between functionalities of a plurality of legacy input devices of the legacy hand-held controller and functionalities of a plurality of updated input devices of the updated hand-held controller, wherein the legacy input device is one of the plurality of legacy input devices, wherein the one or more processors are configured to: determine whether a user input for modifying the default mapping to a current mapping is received from the updated hand-held controller, wherein the default mapping is associated with a user account; associate the current mapping with the user account; receive an additional user input from the updated hand-held controller during the play of the legacy game; parse the additional user input to identify an additional updated input device of the updated hand-held controller; determine an additional functionality of the additional updated input device; determine, based on the identity of the additional updated input device, an identity of an additional legacy input device of the legacy hand-held controller; identify an additional functionality of the additional legacy input device corresponding to the additional functionality of the updated input device; determine whether one or more blocks of code for servicing the additional functionality of the additional legacy input device are cached; access one or more instructions of the legacy game code of the legacy game upon determining that the one or more blocks of code for servicing the additional functionality are not cached; and compile the one or more blocks of code for servicing the additional functionality from the one or more instructions of the legacy game code upon determining that the one or more blocks of code for servicing the additional functionality are not cached.
 15. The system of claim 14, further comprising a network controller interface coupled to the one or more processors, wherein the network controller interface is configured to: transfer the current mapping from a first computing device via a computer network to a server system, wherein the server system is configured to receive a request from a second computing device for the current mapping, wherein the server system is configured to send the current mapping via the computer network to the second computing device in response to the reception of the request.
 16. The system of claim 11, wherein to determine the functionality of the updated input device, the one or more processors are configured to: determine whether a direction of movement of the updated input device based on the user input matches a pre-determined direction; determine whether the movement of the updated input device exceeds a pre-determined threshold upon determining that the direction of movement of the updated input device matches the pre-determined direction, wherein the functionality of the updated input device is identified to be the movement of the updated input device exceeding the pre-determined threshold in the pre-determined direction.
 17. The system of claim 16, wherein to determine the functionality of the legacy input device, the processor is configured to determine that the functionality of the legacy input device achieves the same result as that achieved by the functionality of the updated input device.
 18. The system of claim 11, wherein the updated input device is a touchpad, wherein to parse the user input, the one or more processors are configured to determine whether a selection of the touchpad is received, wherein to determine the functionality of the updated input device, the one or more processors are configured to identify a location of the selection on the touchpad, wherein the one or more processors are configured to access a mapping, wherein to identifying the legacy input device, the one or more processors are configured to identify a button on the legacy hand-held controller based on the mapping, wherein the button is the legacy input device, wherein the one or more processors are configured to execute the one or more blocks of code to generate a virtual object based on the functionality of the button, wherein the virtual object is generated at a location within an image, wherein the location of the virtual object within the image corresponds to the location of the selection on the touchpad.
 19. The system of claim 11, wherein the updated input device is one of a plurality of updated input devices of the updated hand-held controller, wherein the legacy input device is one of a plurality of legacy input devices of the legacy hand-held controller, wherein the one or more processors are further configured to: receive a type of the updated hand-held controller; receive a sub-type of the updated hand-held controller; identify, from the type and the sub-type of the updated hand-held controller, a default mapping between the plurality of updated input devices and the plurality of legacy input devices of the legacy hand-held controller, wherein the legacy input device is identified based on the default mapping.
 20. A system for using an updated hand-held controller to play a legacy game, comprising: the updated hand-held controller having an updated input device, wherein the updated hand-held controller is configured generate a user input during a play of the legacy game; a computing device coupled to the updated hand-held controller, wherein the computing device is configured to: receive the user input from the updated hand-held controller; parse the user input to identify the updated input device of the updated hand-held controller; determine a functionality of the updated input device; determine, based on the identity of the updated input device, an identity of a legacy input device of a legacy hand-held controller; identify a functionality of the legacy input device corresponding to the functionality of the updated input device; determine whether one or more blocks of code for servicing the functionality of the legacy input device of the legacy hand-held controller are cached; access one or more instructions of a legacy game code of the legacy game in response to the determination that the one or more blocks of code are not cached; and compile the one or more blocks of code from the one or more instructions of the legacy game code.
 21. The system of claim 20, wherein the computing device comprises a cache, wherein the cache is configured to store the one or more blocks of code, wherein the computing device is configured to execute the one or more blocks of code to modify a virtual environment of the legacy game. 